MCPcopy Create free account
hub / github.com/Neargye/magic_enum / enum_fuse

Function enum_fuse

include/magic_enum/magic_enum_fuse.hpp:75–85  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

73// Returns a bijective mix of several enum values. This can be used to emulate 2D switch/case statements.
74template <typename... Es>
75[[nodiscard]] constexpr auto enum_fuse(Es... values) noexcept {
76 static_assert((std::is_enum_v<std::decay_t<Es>> && ...), "magic_enum::enum_fuse requires enum type.");
77 static_assert(sizeof...(Es) >= 2, "magic_enum::enum_fuse requires at least 2 values.");
78 static_assert((detail::log2(enum_count<std::decay_t<Es>>() + 1) + ...) <= (sizeof(std::uintmax_t) * 8), "magic_enum::enum_fuse does not work for large enums");
79#if defined(MAGIC_ENUM_NO_TYPESAFE_ENUM_FUSE)
80 const auto fuse = detail::fuse_enum<std::decay_t<Es>...>(values...);
81#else
82 const auto fuse = detail::typesafe_fuse_enum<std::decay_t<Es>...>(values...);
83#endif
84 return MAGIC_ENUM_ASSERT(fuse), fuse;
85}
86
87} // namespace magic_enum
88

Callers 2

switch_case_2dFunction · 0.85
switch_case_3dFunction · 0.85

Calls 1

log2Function · 0.85

Tested by 2

switch_case_2dFunction · 0.68
switch_case_3dFunction · 0.68