Здравствуйте, vdimas, Вы писали:
V>Всем привет, коллега попросил спросить:
V>https://godbolt.org/z/xhP1b4cn6
перечисление — это не набор констант, это не набор флагов, перечисление — это набор идентификаторов. Если это понять, то программировать станет намного легче:
namespace EEEconstants
{
inline constexpr int zero = 0;
inline constexpr int one = 1;
inline constexpr int two = 2;
};
struct CEEEconstant
{
inline constexpr static int zero = 0;
inline constexpr static int one = 1;
inline constexpr static int two = 2;
inline constexpr static std::array all = {zero, one, two};
};
static_assert(EEEconstants::zero == CEEEconstant::zero);
static_assert(EEEconstants::one < CEEEconstant::two);
struct MoveFileFlags_
{
inline constexpr static unsigned int copyAllowed = 1;
inline constexpr static unsigned int replaceExisting = 2;
inline constexpr static unsigned int overwrite = 2; //!< Same as replaceExisting
inline constexpr static unsigned int writeThrough = 4;
inline constexpr static unsigned int validMask = copyAllowed | replaceExisting | overwrite | writeThrough;
};