77
88// Template function for casting enumerations to their underlying type
99template <typename Enumeration>
10- typename std::underlying_type <Enumeration>::type enum_cast (Enumeration E)
10+ std::underlying_type_t <Enumeration> enum_cast (Enumeration E)
1111{
12- return static_cast <typename std::underlying_type <Enumeration>::type >(E);
12+ return static_cast <typename std::underlying_type_t <Enumeration>>(E);
1313}
1414
1515namespace detail
@@ -25,67 +25,67 @@ namespace detail
2525 Enum value;
2626 constexpr enum_bool_helper (Enum value): value(value) {}
2727 constexpr operator Enum () const { return value; }
28- constexpr operator bool () const { return static_cast <bool >(static_cast <typename std::underlying_type <Enum>::type >(value)); }
28+ constexpr operator bool () const { return static_cast <bool >(static_cast <std::underlying_type_t <Enum>>(value)); }
2929 };
3030};
3131
3232#define MARK_ENUM_AS_FLAGS (T ) template <> struct detail ::enum_is_flags<T> : public std::true_type {}
3333
3434template <typename Enum>
35- constexpr typename std::enable_if< detail::enum_is_flags<Enum>::value, Enum>::type
36- operator |(Enum lhs, Enum rhs) noexcept
35+ requires detail::enum_is_flags<Enum>::value
36+ constexpr Enum operator |(Enum lhs, Enum rhs) noexcept
3737{
38- using underlying = typename std::underlying_type <Enum>::type ;
38+ using underlying = std::underlying_type_t <Enum>;
3939 return static_cast <Enum>(static_cast <underlying>(lhs) | static_cast <underlying>(rhs));
4040}
4141
4242template <typename Enum>
43- constexpr typename std::enable_if< detail::enum_is_flags<Enum>::value, detail::enum_bool_helper<Enum>>::type
44- operator &(Enum lhs, Enum rhs) noexcept
43+ requires detail::enum_is_flags<Enum>::value
44+ constexpr detail::enum_bool_helper<Enum> operator &(Enum lhs, Enum rhs) noexcept
4545{
46- using underlying = typename std::underlying_type <Enum>::type ;
46+ using underlying = std::underlying_type_t <Enum>;
4747 return static_cast <Enum>(static_cast <underlying>(lhs) & static_cast <underlying>(rhs));
4848}
4949
5050template <typename Enum>
51- constexpr typename std::enable_if< detail::enum_is_flags<Enum>::value, Enum>::type
52- operator ^(Enum lhs, Enum rhs) noexcept
51+ requires detail::enum_is_flags<Enum>::value
52+ constexpr Enum operator ^(Enum lhs, Enum rhs) noexcept
5353{
54- using underlying = typename std::underlying_type <Enum>::type ;
54+ using underlying = std::underlying_type_t <Enum>;
5555 return static_cast <Enum>(static_cast <underlying>(lhs) ^ static_cast <underlying>(rhs));
5656}
5757
5858template <typename Enum>
59- constexpr typename std::enable_if< detail::enum_is_flags<Enum>::value, Enum&>::type
60- operator |=(Enum& lhs, Enum rhs) noexcept
59+ requires detail::enum_is_flags<Enum>::value
60+ constexpr Enum& operator |=(Enum& lhs, Enum rhs) noexcept
6161{
6262 return lhs = lhs | rhs;
6363}
6464
6565template <typename Enum>
66- constexpr typename std::enable_if< detail::enum_is_flags<Enum>::value, Enum&>::type
67- operator &=(Enum& lhs, Enum rhs) noexcept
66+ requires detail::enum_is_flags<Enum>::value
67+ constexpr Enum& operator &=(Enum& lhs, Enum rhs) noexcept
6868{
6969 return lhs = lhs & rhs;
7070}
7171
7272template <typename Enum>
73- constexpr typename std::enable_if< detail::enum_is_flags<Enum>::value, Enum&>::type
74- operator ^=(Enum& lhs, Enum rhs) noexcept
73+ requires detail::enum_is_flags<Enum>::value
74+ constexpr Enum& operator ^=(Enum& lhs, Enum rhs) noexcept
7575{
7676 return lhs = lhs ^ rhs;
7777}
7878
79- template <typename Enum>
80- constexpr typename std::enable_if< detail::enum_is_flags<Enum>::value, bool >::type
81- operator !(Enum e) noexcept
79+ template <typename Enum>
80+ requires detail::enum_is_flags<Enum>::value
81+ constexpr bool operator !(Enum e) noexcept
8282{
83- return !static_cast <typename std::underlying_type <Enum>::type >(e);
83+ return !static_cast <std::underlying_type_t <Enum>>(e);
8484}
8585
86- template <typename Enum>
87- constexpr typename std::enable_if< detail::enum_is_flags<Enum>::value, Enum>::type
88- operator ~(Enum e) noexcept
86+ template <typename Enum>
87+ requires detail::enum_is_flags<Enum>::value
88+ constexpr Enum operator ~(Enum e) noexcept
8989{
90- return static_cast <Enum>(~static_cast <typename std::underlying_type <Enum>::type >(e));
90+ return static_cast <Enum>(~static_cast <std::underlying_type_t <Enum>>(e));
9191}
0 commit comments