1
0
Fork 0
mirror of https://github.com/Neargye/magic_enum.git synced 2026-01-09 23:34:23 +00:00

Convert std::enable_if_t to static_assert for cleaner error message (#146)

This commit is contained in:
Pavel I. Kryukov 2022-02-19 13:26:06 +03:00 committed by GitHub
parent 29285919fd
commit ec87fc976c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -938,7 +938,8 @@ constexpr std::optional<std::uintmax_t> fuse_enum(E head, Es... tail) noexcept {
// Returns a bijective mix of several enum values. This can be used to emulate 2D switch/case statements.
template <typename... Es>
[[nodiscard]] constexpr auto enum_fuse(Es... values) -> std::enable_if_t<(std::is_enum_v<std::decay_t<Es>> && ...), std::optional<std::uintmax_t>> {
[[nodiscard]] constexpr auto enum_fuse(Es... values) {
static_assert((std::is_enum_v<std::decay_t<Es>> && ...), "magic_enum::enum_fuse works only with enums");
static_assert(sizeof...(Es) >= 2, "magic_enum::enum_fuse requires at least 2 enums");
static_assert((detail::log2(enum_count<Es>() + 1) + ...) <= (sizeof(std::uintmax_t) * 8), "magic_enum::enum_fuse does not work for large enums");
const auto fuse = fusion_detail::fuse_enum(values...);