diff --git a/include/magic_enum_containers.hpp b/include/magic_enum_containers.hpp index 8779d5c..0abc037 100644 --- a/include/magic_enum_containers.hpp +++ b/include/magic_enum_containers.hpp @@ -580,9 +580,9 @@ public: } } } - - template - constexpr explicit bitset(std::enable_if_t == magic_enum::detail::enum_subtype::flags, E> starter) : a{{}} { + template && magic_enum::detail::subtype_v == magic_enum::detail::enum_subtype::flags, int> = 0> + constexpr explicit bitset(V starter) : a{{}} { auto u = enum_underlying(starter); for (E v : enum_values()) { if (auto ul = enum_underlying(v); (ul & u) != 0) { @@ -803,6 +803,9 @@ private: container_type a; }; +template +explicit bitset(V starter) -> bitset; + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // SET // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -847,13 +850,13 @@ public: insert(e); } } - - template - constexpr explicit set(std::enable_if_t == magic_enum::detail::enum_subtype::flags, E> starter) { + template &&magic_enum::detail::subtype_v == magic_enum::detail::enum_subtype::flags, int> = 0> + constexpr explicit set(V starter) { auto u = enum_underlying(starter); for (E v : enum_values()) { if ((enum_underlying(v) & u) != 0) { - (*this)[v] = true; + insert(v); } } } @@ -1095,6 +1098,10 @@ private: std::size_t s{}; }; + +template +explicit set(V starter) -> set; + } // namespace magic_enum::containers namespace std {