小编GLJ*_*eff的帖子

Is using enum class for flags undefined behavior?

I've been using overloaded operators as demonstrated in the second answer from here: How to use C++11 enum class for flags ... example:

#define ENUMFLAGOPS(EnumName)\
[[nodiscard]] __forceinline EnumName operator|(EnumName lhs, EnumName rhs)\
{\
    return static_cast<EnumName>(\
        static_cast<std::underlying_type<EnumName>::type>(lhs) |\
        static_cast<std::underlying_type<EnumName>::type>(rhs)\
        );\
}...(other operator overloads)

enum class MyFlags : UINT //duplicated in JS
{
    None = 0,
    FlagA = 1,
    FlagB = 2,
    FlagC = 4,
};
ENUMFLAGOPS(MyFlags)
Run Code Online (Sandbox Code Playgroud)

...

MyFlags Flags = MyFlags::FlagA | MyFlags::FlagB;
Run Code Online (Sandbox Code Playgroud)

And I've grown concerned that this may be …

c++ undefined-behavior enum-class c++20

3
推荐指数
1
解决办法
245
查看次数

标签 统计

c++ ×1

c++20 ×1

enum-class ×1

undefined-behavior ×1