|
template<typename BinaryPredicate > |
constexpr bool | cmp_equal (string_view lhs, string_view rhs, [[maybe_unused]] BinaryPredicate &&p) noexcept(is_nothrow_invocable< BinaryPredicate >()) |
|
template<typename L , typename R > |
constexpr bool | cmp_less (L lhs, R rhs) noexcept |
|
template<typename E , enum_subtype S, std::size_t... I> |
constexpr auto | entries (std::index_sequence< I... >) noexcept |
|
template<typename E , detail::enum_subtype S = detail::subtype_v<E>, typename BinaryPredicate = std::equal_to<>> |
constexpr auto | enum_cast (string_view value, [[maybe_unused]] BinaryPredicate p={}) noexcept(detail::is_nothrow_invocable< BinaryPredicate >()) -> detail::enable_if_t< E, optional< std::decay_t< E >>, BinaryPredicate > |
|
template<typename E , detail::enum_subtype S = detail::subtype_v<E>> |
constexpr auto | enum_cast (underlying_type_t< E > value) noexcept -> detail::enable_if_t< E, optional< std::decay_t< E >>> |
|
template<typename E , detail::enum_subtype S = detail::subtype_v<E>> |
constexpr auto | enum_contains (E value) noexcept -> detail::enable_if_t< E, bool > |
|
template<typename E , detail::enum_subtype S = detail::subtype_v<E>, typename BinaryPredicate = std::equal_to<>> |
constexpr auto | enum_contains (string_view value, BinaryPredicate p={}) noexcept(detail::is_nothrow_invocable< BinaryPredicate >()) -> detail::enable_if_t< E, bool, BinaryPredicate > |
|
template<typename E , detail::enum_subtype S = detail::subtype_v<E>> |
constexpr auto | enum_contains (underlying_type_t< E > value) noexcept -> detail::enable_if_t< E, bool > |
|
template<typename E , detail::enum_subtype S = detail::subtype_v<E>> |
constexpr auto | enum_count () noexcept -> detail::enable_if_t< E, std::size_t > |
|
template<typename E , detail::enum_subtype S = detail::subtype_v<E>> |
constexpr auto | enum_entries () noexcept -> detail::enable_if_t< E, detail::entries_t< E, S >> |
|
template<auto V, detail::enum_subtype S = detail::subtype_v<std::decay_t<decltype(V)>>> |
constexpr auto | enum_index () noexcept -> detail::enable_if_t< decltype(V), std::size_t > |
|
template<typename E , detail::enum_subtype S = detail::subtype_v<E>> |
constexpr auto | enum_index (E value) noexcept -> detail::enable_if_t< E, optional< std::size_t >> |
|
template<typename E > |
constexpr auto | enum_integer (E value) noexcept -> detail::enable_if_t< E, underlying_type_t< E >> |
|
template<typename E , E V> |
constexpr auto | enum_name () noexcept |
|
template<auto V> |
constexpr auto | enum_name () noexcept -> detail::enable_if_t< decltype(V), string_view > |
|
template<typename E , detail::enum_subtype S = detail::subtype_v<E>> |
constexpr auto | enum_name (E value) noexcept -> detail::enable_if_t< E, string_view > |
|
template<typename E > |
constexpr customize_t | enum_name (E) noexcept |
|
template<typename E , detail::enum_subtype S = detail::subtype_v<E>> |
constexpr auto | enum_names () noexcept -> detail::enable_if_t< E, detail::names_t< E, S >> |
|
template<typename E > |
constexpr customize_t | enum_type_name () noexcept |
|
template<typename E > |
constexpr auto | enum_type_name () noexcept -> detail::enable_if_t< E, string_view > |
|
template<typename E > |
constexpr auto | enum_underlying (E value) noexcept -> detail::enable_if_t< E, underlying_type_t< E >> |
|
template<typename E , std::size_t I, detail::enum_subtype S = detail::subtype_v<E>> |
constexpr auto | enum_value () noexcept -> detail::enable_if_t< E, std::decay_t< E >> |
|
template<typename E , detail::enum_subtype S = detail::subtype_v<E>> |
constexpr auto | enum_value (std::size_t index) noexcept -> detail::enable_if_t< E, std::decay_t< E >> |
|
template<typename E , detail::enum_subtype S = detail::subtype_v<E>> |
constexpr auto | enum_values () noexcept -> detail::enable_if_t< E, detail::values_t< E, S >> |
|
constexpr std::size_t | find (string_view str, char_type c) noexcept |
|
template<typename BinaryPredicate > |
constexpr bool | is_default_predicate () noexcept |
|
template<typename BinaryPredicate > |
constexpr bool | is_nothrow_invocable () |
|
template<typename E , enum_subtype S, typename U = std::underlying_type_t<E>> |
constexpr bool | is_sparse () noexcept |
|
template<typename E , auto V> |
constexpr bool | is_valid () noexcept |
|
template<typename I > |
constexpr I | log2 (I value) noexcept |
|
template<typename E > |
constexpr auto | n () noexcept |
|
template<typename E , enum_subtype S, std::size_t... I> |
constexpr auto | names (std::index_sequence< I... >) noexcept |
|
template<typename E , detail::enable_if_t< E, int > = 0> |
constexpr E | operator& (E lhs, E rhs) noexcept |
|
template<typename E , detail::enable_if_t< E, int > = 0> |
constexpr E & | operator&= (E &lhs, E rhs) noexcept |
|
template<typename E , detail::enable_if_t< E, int > = 0> |
constexpr E | operator^ (E lhs, E rhs) noexcept |
|
template<typename E , detail::enable_if_t< E, int > = 0> |
constexpr E & | operator^= (E &lhs, E rhs) noexcept |
|
template<typename E , detail::enable_if_t< E, int > = 0> |
constexpr E | operator| (E lhs, E rhs) noexcept |
|
template<typename E , detail::enable_if_t< E, int > = 0> |
constexpr E & | operator|= (E &lhs, E rhs) noexcept |
|
template<typename E , detail::enable_if_t< E, int > = 0> |
constexpr E | operator~ (E rhs) noexcept |
|
template<typename E , enum_subtype S, typename U = std::underlying_type_t<E>> |
constexpr int | reflected_max () noexcept |
|
template<typename E , enum_subtype S, typename U = std::underlying_type_t<E>> |
constexpr int | reflected_min () noexcept |
|
template<typename T > |
constexpr enum_subtype | subtype (std::false_type) noexcept |
|
template<typename E , typename U = std::underlying_type_t<E>> |
constexpr enum_subtype | subtype (std::true_type) noexcept |
|
template<typename T , std::size_t N, std::size_t... I> |
constexpr std::array< std::remove_cv_t< T >, N > | to_array (T(&a)[N], std::index_sequence< I... >) noexcept |
|
template<typename E > |
constexpr auto | type_name () noexcept |
|
template<typename E , int O, enum_subtype S, typename U = std::underlying_type_t<E>> |
constexpr U | ualue (std::size_t i) noexcept |
|
template<typename E , enum_subtype S, std::size_t Size, int Min> |
constexpr auto | valid_count () noexcept |
|
template<typename E , enum_subtype S, std::size_t Size, int Min, std::size_t I> |
constexpr void | valid_count (bool *valid, std::size_t &count) noexcept |
|
template<typename E , int O, enum_subtype S, typename U = std::underlying_type_t<E>> |
constexpr E | value (std::size_t i) noexcept |
|
template<typename E , enum_subtype S, std::size_t Size, int Min> |
constexpr auto | values () noexcept |
|
template<typename E , enum_subtype S, typename U = std::underlying_type_t<E>> |
constexpr auto | values () noexcept |
|
template<typename E , enum_subtype S, typename U = std::underlying_type_t<E>> |
constexpr U | values_ors () noexcept |
|
|
template<typename... T> |
constexpr bool | always_false_v = false |
|
template<bool AsFlags = true> |
constexpr auto | as_common = AsFlags ? detail::enum_subtype::common : detail::enum_subtype::flags |
|
template<bool AsFlags = true> |
constexpr auto | as_flags = AsFlags ? detail::enum_subtype::flags : detail::enum_subtype::common |
|
constexpr auto | case_insensitive = detail::case_insensitive<>{} |
|
template<typename E , enum_subtype S> |
constexpr auto | count_v = values_v<E, S>.size() |
|
constexpr auto | default_tag = customize_t{detail::customize_tag::default_tag} |
|
template<typename E , enum_subtype S> |
constexpr auto | entries_v = entries<E, S>(std::make_index_sequence<count_v<E, S>>{}) |
|
template<typename E , E V> |
constexpr auto | enum_name_v = enum_name<E, V>() |
|
constexpr auto | invalid_tag = customize_t{detail::customize_tag::invalid_tag} |
|
template<typename T > |
constexpr bool | is_enum_v = std::is_enum_v<T> && std::is_same_v<T, std::decay_t<T>> |
|
constexpr bool | is_magic_enum_supported = detail::supported<void>::value |
|
template<typename T > |
constexpr bool | is_scoped_enum_v = is_scoped_enum<T>::value |
|
template<typename E , enum_subtype S = subtype_v<E>> |
constexpr bool | is_sparse_v = is_sparse<E, S>() |
|
template<typename T > |
constexpr bool | is_unscoped_enum_v = is_unscoped_enum<T>::value |
|
template<typename E , enum_subtype S, typename U = std::underlying_type_t<E>> |
constexpr auto | max_v = (count_v<E, S> > 0) ? static_cast<U>(values_v<E, S>.back()) : U{0} |
|
template<typename E , enum_subtype S, typename U = std::underlying_type_t<E>> |
constexpr auto | min_v = (count_v<E, S> > 0) ? static_cast<U>(values_v<E, S>.front()) : U{0} |
|
template<typename E , enum_subtype S> |
constexpr auto | names_v = names<E, S>(std::make_index_sequence<count_v<E, S>>{}) |
|
template<typename E , typename D = std::decay_t<E>> |
constexpr auto | subtype_v = subtype<D>(std::is_enum<D>{}) |
|
template<typename E > |
constexpr auto | type_name_v = type_name<E>() |
|
template<typename E , enum_subtype S> |
constexpr auto | values_v = values<E, S>() |
|