Skip to content

GCC 13,14,15 magic_enum in lambdas - compilation failed #452

@fsmoke

Description

@fsmoke

Hi, code below does not compiles when MAKE_ERROR = 1

#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;
}

See on godbolt
https://godbolt.org/z/8dzT934Gf

PS
Tested on GCC 13,14,15 - error is still exists

PS2
with MSVC all ok

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions