#include <iostream>
#include <cstdint>
#include <magic_enum/magic_enum.hpp>
enum class types_t : int32_t
{
unknown_type = -1,
void_type = 0,
bool_type,
int8_type,
uint8_type,
int16_type,
uint16_type,
int32_type,
uint32_type,
int64_type,
uint64_type,
float32_type,
float64_type,
string_type,
uuid_type,
datetime_type,
buffer_type,
binary_type
};
void types_value(std::string_view v, types_t t)
{
std::cout << v << ' ';
}
#define MAKE_ERROR 1
#if MAKE_ERROR == 0
inline void register_types_t()
{
constexpr auto entries = magic_enum::enum_entries<types_t>();
auto iterate_impl = [&entries]<size_t... I>(std::index_sequence<I...>)
{
(types_value(entries[I].second.data(), entries[I].first), ...);
};
iterate_impl(std::make_index_sequence<::magic_enum::enum_count<types_t>()>{});
}
#else
inline void register_types_t()
{
auto iterate_impl = []<size_t... I>(std::index_sequence<I...>)
{
constexpr auto entries = ::magic_enum::enum_entries<types_t>();
(types_value(entries[I].second.data(), entries[I].first), ...);
};
iterate_impl(std::make_index_sequence<::magic_enum::enum_count<types_t>()>{});
}
#endif
int main() {
register_types_t();
return 0;
}
Hi, code below does not compiles when MAKE_ERROR = 1
See on godbolt
https://godbolt.org/z/8dzT934Gf
PS
Tested on GCC 13,14,15 - error is still exists
PS2
with MSVC all ok