@@ -1414,6 +1414,35 @@ template <typename E, detail::enum_subtype S = detail::subtype_v<E>, typename Bi
14141414 return static_cast <bool >(enum_cast<D, S>(value, std::move (p)));
14151415}
14161416
1417+ // Returns true if the enum value is in the range of values that can be reflected.
1418+ template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1419+ [[nodiscard]] constexpr auto enum_reflected (E value) noexcept -> detail::enable_if_t<E, bool> {
1420+ using D = std::decay_t <E>;
1421+
1422+ if constexpr (detail::is_reflected_v<D, S>) {
1423+ constexpr auto min = detail::reflected_min<E, S>();
1424+ constexpr auto max = detail::reflected_max<E, S>();
1425+ return value >= min && value <= max;
1426+ }
1427+ return false ;
1428+ }
1429+
1430+ // Returns true if the enum value is in the range of values that can be reflected.
1431+ template <detail::enum_subtype S, typename E>
1432+ [[nodiscard]] constexpr auto enum_reflected (E value) noexcept -> detail::enable_if_t<E, bool> {
1433+ using D = std::decay_t <E>;
1434+
1435+ return enum_cast<D, S>(value);
1436+ }
1437+
1438+ // Returns true if the enum integer value is in the range of values that can be reflected.
1439+ template <typename E, detail::enum_subtype S = detail::subtype_v<E>>
1440+ [[nodiscard]] constexpr auto enum_reflected (underlying_type_t <E> value) noexcept -> detail::enable_if_t<E, bool> {
1441+ using D = std::decay_t <E>;
1442+
1443+ return enum_cast<D, S>(value);
1444+ }
1445+
14171446template <bool AsFlags = true >
14181447inline constexpr auto as_flags = AsFlags ? detail::enum_subtype::flags : detail::enum_subtype::common;
14191448
0 commit comments