-
Notifications
You must be signed in to change notification settings - Fork 415
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Zero value in is_flags
enum.
#321
Milestone
Comments
Just to fill this out with a code example: template <auto Start, auto End, auto Inc, class F>
constexpr void constexpr_for(F&& f)
{
if constexpr (Start < End)
{
f(std::integral_constant<decltype(Start), Start>());
constexpr_for<Start + Inc, End, Inc>(f);
}
}
enum APLHABITS
{
NONE = 0,
A = 0x0001,
B = 0x0002,
C = 0x0004,
D = 0x0008,
E = 0x0010,
F = 0x0020,
G = 0x0040,
H = 0x0080,
I = 0x0100,
J = 0x0200,
// K = 0x0300, // ignore this one, it's a typo
L = 0x0400,
M = 0x0800,
N = 0x1000,
O = 0x2000,
P = 0x4000,
Q = 0x8000
};
template <>
struct magic_enum::customize::enum_range<APLHABITS> {
static constexpr bool is_flags = true;
};
void myfunc()
{
constexpr std::size_t count = magic_enum::enum_count<APLHABITS>();
printf("%ld ", count);
constexpr auto names = magic_enum::enum_names<APLHABITS>();
constexpr_for<0, count, 1>([&](auto i)
{
printf("%s:%d ", names[i].data(), magic_enum::enum_value<APLHABITS, i>());
});
} When you run
I would like it to print
while keeping the |
Closed
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
In reading #314, it appears that it is not possible to fully iterate an
is_flags
enum that has a zero value. This seems like an unfortunate limitation. I have frequently encountered bit-sensitive enums that include a 0 value for clearing out the bits. My code simply needs to iterate the names and values to create Lua constants, and bit-sensitive values are resource-intensive if they don't setis_flags
.The text was updated successfully, but these errors were encountered: