So far I have:
#include <cstdint>
enum class le_enum : uint32_t {
    FLAG_0 = 0x00000000,
    FLAG_1 = 0x00000001,
    FLAG_2 = 0x00000002,
    FLAG_3 = 0x00000004,
    FLAG_4 = 0x00000008,
    FLAG_5 = 0x00000010,
    FLAG_6 = 0x00000020,
    FLAG_7 = 0x00000040
};
inline uint32_t operator|(const le_enum lhs, const le_enum rhs) {
    return (uint32_t)lhs | (uint32_t)rhs;
}
inline uint32_t operator|(const uint32_t lhs, const le_enum rhs) {
    return lhs | (uint32_t)rhs;
}
int main(int argc, char** argv) {
    uint32_t flags = le_enum::FLAG_0 | le_enum::FLAG_7;
    uint32_t flags2 = le_enum::FLAG_2 | le_enum::FLAG_3 | le_enum::FLAG_5;
    return 0;
}
where I need to define 2 operators.
Can I enable this with with less code?