diff --git a/.github/workflows/darwin.yml b/.github/workflows/darwin.yml index b821ff4..3193be9 100644 --- a/.github/workflows/darwin.yml +++ b/.github/workflows/darwin.yml @@ -10,8 +10,9 @@ jobs: matrix: config: # https://github.com/actions/virtual-environments/tree/main/images/macos - - { os: "macos-11", xcode: "13.0", arch: "x64" } - { os: "macos-12", xcode: "14.0", arch: "x64" } + - { os: "macos-12", xcode: "14.1", arch: "x64" } + - { os: "macos-12", xcode: "14.2", arch: "x64" } name: "xcode-${{matrix.config.xcode}}" steps: - name: Setup diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index e35009d..8849b22 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -12,6 +12,8 @@ jobs: # https://github.com/actions/virtual-environments/tree/main/images/linux - { os: "ubuntu-20.04", cc: "gcc-10", cxx: "g++-10" } - { os: "ubuntu-20.04", cc: "clang-10", cxx: "clang++-10" } + - { os: "ubuntu-22.04", cc: "gcc-12", cxx: "g++-12" } + - { os: "ubuntu-22.04", cc: "clang-15", cxx: "clang++-15" } name: "${{matrix.config.cxx}}" steps: - name: Setup diff --git a/headers/meta.hpp/meta_base.hpp b/headers/meta.hpp/meta_base.hpp index bd7fc9b..1eefff8 100644 --- a/headers/meta.hpp/meta_base.hpp +++ b/headers/meta.hpp/meta_base.hpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include diff --git a/headers/meta.hpp/meta_base/fixed_function.hpp b/headers/meta.hpp/meta_base/fixed_function.hpp index 70aa184..9cb0675 100644 --- a/headers/meta.hpp/meta_base/fixed_function.hpp +++ b/headers/meta.hpp/meta_base/fixed_function.hpp @@ -8,13 +8,13 @@ #include #include + +#include #include #include #include #include -#include "stdex.hpp" - namespace meta_hpp::detail { template < typename Function > @@ -45,14 +45,14 @@ namespace meta_hpp::detail } template < typename Functor > - requires (!stdex::same_as>) + requires (!std::same_as>) // NOLINTNEXTLINE(*-forwarding-reference-overload) fixed_function(Functor&& functor) { vtable_t::construct(*this, std::forward(functor)); } template < typename Functor > - requires (!stdex::same_as>) + requires (!std::same_as>) fixed_function& operator=(Functor&& functor) { fixed_function{std::forward(functor)}.swap(*this); return *this; diff --git a/headers/meta.hpp/meta_base/stdex.hpp b/headers/meta.hpp/meta_base/stdex.hpp index ab906e2..095087d 100644 --- a/headers/meta.hpp/meta_base/stdex.hpp +++ b/headers/meta.hpp/meta_base/stdex.hpp @@ -8,45 +8,6 @@ #include -namespace meta_hpp::stdex -{ - template < typename T, typename U > - concept same_as = - std::is_same_v && - std::is_same_v; - - template < typename Derived, typename Base > - concept derived_from = - std::is_base_of_v && - std::is_convertible_v; - - template < typename From, typename To > - concept convertible_to = - std::is_convertible_v && - requires { static_cast(std::declval()); }; - - template < typename T > - concept destructible = - std::is_nothrow_destructible_v; - - template < typename T, typename... Args > - concept constructible_from = - destructible && - std::is_constructible_v; - - template < typename T > - concept move_constructible = - constructible_from && - convertible_to; - - template - concept copy_constructible = - move_constructible && - constructible_from && convertible_to && - constructible_from && convertible_to && - constructible_from && convertible_to; -} - namespace meta_hpp::stdex { template < typename Enum > diff --git a/headers/meta.hpp/meta_binds.hpp b/headers/meta.hpp/meta_binds.hpp index 54c1bdf..4cc0b87 100644 --- a/headers/meta.hpp/meta_binds.hpp +++ b/headers/meta.hpp/meta_binds.hpp @@ -27,17 +27,17 @@ namespace meta_hpp::detail template < typename Class, typename Base > concept class_bind_base_kind = class_kind && class_kind && - stdex::derived_from; + std::derived_from; template < typename Class, typename Member > concept class_bind_member_kind = class_kind && member_kind && - stdex::same_as::class_type>; + std::same_as::class_type>; template < typename Class, typename Method > concept class_bind_method_kind = class_kind && method_kind && - stdex::same_as::class_type>; + std::same_as::class_type>; } namespace meta_hpp diff --git a/headers/meta.hpp/meta_detail/index_family.hpp b/headers/meta.hpp/meta_detail/index_family.hpp index 9d32ed3..b0b40ea 100644 --- a/headers/meta.hpp/meta_detail/index_family.hpp +++ b/headers/meta.hpp/meta_detail/index_family.hpp @@ -12,15 +12,15 @@ namespace meta_hpp::detail { template < typename T > inline constexpr bool is_index_family_v = - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as; template < typename T > concept index_family = is_index_family_v; diff --git a/headers/meta.hpp/meta_detail/state_family.hpp b/headers/meta.hpp/meta_detail/state_family.hpp index 9548338..04755b1 100644 --- a/headers/meta.hpp/meta_detail/state_family.hpp +++ b/headers/meta.hpp/meta_detail/state_family.hpp @@ -12,15 +12,15 @@ namespace meta_hpp::detail { template < typename T > inline constexpr bool is_state_family_v = - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as; template < typename T > concept state_family = is_state_family_v; diff --git a/headers/meta.hpp/meta_detail/type_family.hpp b/headers/meta.hpp/meta_detail/type_family.hpp index 2c48fc8..d73c0a4 100644 --- a/headers/meta.hpp/meta_detail/type_family.hpp +++ b/headers/meta.hpp/meta_detail/type_family.hpp @@ -12,20 +12,20 @@ namespace meta_hpp::detail { template < typename T > inline constexpr bool is_type_family_v = - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as; template < typename T > concept type_family = is_type_family_v; diff --git a/headers/meta.hpp/meta_detail/value_traits/deref_traits.hpp b/headers/meta.hpp/meta_detail/value_traits/deref_traits.hpp index 05781a5..83b9ea9 100644 --- a/headers/meta.hpp/meta_detail/value_traits/deref_traits.hpp +++ b/headers/meta.hpp/meta_detail/value_traits/deref_traits.hpp @@ -16,34 +16,34 @@ namespace meta_hpp::detail template < typename T > concept has_deref_traits = requires(const T& v) { - { deref_traits{}(v) } -> stdex::convertible_to; + { deref_traits{}(v) } -> std::convertible_to; }; } namespace meta_hpp::detail { - template < stdex::copy_constructible T > + template < std::copy_constructible T > struct deref_traits { uvalue operator()(T* v) const { return uvalue{*v}; } }; - template < stdex::copy_constructible T > + template < std::copy_constructible T > struct deref_traits { uvalue operator()(const T* v) const { return uvalue{*v}; } }; - template < stdex::copy_constructible T > + template < std::copy_constructible T > struct deref_traits> { uvalue operator()(const std::shared_ptr& v) const { return uvalue{*v}; } }; - template < stdex::copy_constructible T > + template < std::copy_constructible T > struct deref_traits> { uvalue operator()(const std::unique_ptr& v) const { return uvalue{*v}; diff --git a/headers/meta.hpp/meta_detail/value_traits/equals_traits.hpp b/headers/meta.hpp/meta_detail/value_traits/equals_traits.hpp index 76f4701..9a65bea 100644 --- a/headers/meta.hpp/meta_detail/value_traits/equals_traits.hpp +++ b/headers/meta.hpp/meta_detail/value_traits/equals_traits.hpp @@ -16,7 +16,7 @@ namespace meta_hpp::detail template < typename T > concept has_equals_traits = requires(const T& l, const T& r) { - { equals_traits{}(l, r) } -> stdex::convertible_to; + { equals_traits{}(l, r) } -> std::convertible_to; }; } @@ -24,7 +24,7 @@ namespace meta_hpp::detail { template < typename T > requires requires(const T& l, const T& r) { - { std::equal_to<>{}(l, r) } -> stdex::convertible_to; + { std::equal_to<>{}(l, r) } -> std::convertible_to; } struct equals_traits { bool operator()(const T& l, const T& r) const { diff --git a/headers/meta.hpp/meta_detail/value_traits/index_traits.hpp b/headers/meta.hpp/meta_detail/value_traits/index_traits.hpp index 98c9ef2..f46f722 100644 --- a/headers/meta.hpp/meta_detail/value_traits/index_traits.hpp +++ b/headers/meta.hpp/meta_detail/value_traits/index_traits.hpp @@ -16,13 +16,13 @@ namespace meta_hpp::detail template < typename T > concept has_index_traits = requires(const T& v, std::size_t i) { - { index_traits{}(v, i) } -> stdex::convertible_to; + { index_traits{}(v, i) } -> std::convertible_to; }; } namespace meta_hpp::detail { - template < stdex::copy_constructible T > + template < std::copy_constructible T > struct index_traits { uvalue operator()(T* v, std::size_t i) const { // NOLINTNEXTLINE(*-pointer-arithmetic) @@ -30,7 +30,7 @@ namespace meta_hpp::detail } }; - template < stdex::copy_constructible T > + template < std::copy_constructible T > struct index_traits { uvalue operator()(const T* v, std::size_t i) const { // NOLINTNEXTLINE(*-pointer-arithmetic) @@ -38,28 +38,28 @@ namespace meta_hpp::detail } }; - template < stdex::copy_constructible T, std::size_t Size > + template < std::copy_constructible T, std::size_t Size > struct index_traits> { uvalue operator()(const std::array& v, std::size_t i) const { return uvalue{v[i]}; } }; - template < stdex::copy_constructible T, std::size_t Extent > + template < std::copy_constructible T, std::size_t Extent > struct index_traits> { uvalue operator()(const std::span& v, std::size_t i) const { return uvalue{v[i]}; } }; - template < stdex::copy_constructible T, typename Traits, typename Allocator > + template < std::copy_constructible T, typename Traits, typename Allocator > struct index_traits> { uvalue operator()(const std::basic_string& v, std::size_t i) const { return uvalue{v[i]}; } }; - template < stdex::copy_constructible T, typename Allocator > + template < std::copy_constructible T, typename Allocator > struct index_traits> { uvalue operator()(const std::vector& v, std::size_t i) { return uvalue{v[i]}; diff --git a/headers/meta.hpp/meta_detail/value_traits/istream_traits.hpp b/headers/meta.hpp/meta_detail/value_traits/istream_traits.hpp index 6d8bfd9..2d383e3 100644 --- a/headers/meta.hpp/meta_detail/value_traits/istream_traits.hpp +++ b/headers/meta.hpp/meta_detail/value_traits/istream_traits.hpp @@ -16,7 +16,7 @@ namespace meta_hpp::detail template < typename T > concept has_istream_traits = requires(std::istream& is, T& v) { - { istream_traits{}(is, v) } -> stdex::convertible_to; + { istream_traits{}(is, v) } -> std::convertible_to; }; } @@ -24,7 +24,7 @@ namespace meta_hpp::detail { template < typename T > requires requires(std::istream& is, T& v) { - { is >> v } -> stdex::convertible_to; + { is >> v } -> std::convertible_to; } struct istream_traits { std::istream& operator()(std::istream& is, T& v) const { diff --git a/headers/meta.hpp/meta_detail/value_traits/less_traits.hpp b/headers/meta.hpp/meta_detail/value_traits/less_traits.hpp index e3a2d63..04bd8b3 100644 --- a/headers/meta.hpp/meta_detail/value_traits/less_traits.hpp +++ b/headers/meta.hpp/meta_detail/value_traits/less_traits.hpp @@ -16,7 +16,7 @@ namespace meta_hpp::detail template < typename T > concept has_less_traits = requires(const T& l, const T& r) { - { less_traits{}(l, r) } -> stdex::convertible_to; + { less_traits{}(l, r) } -> std::convertible_to; }; } @@ -24,7 +24,7 @@ namespace meta_hpp::detail { template < typename T > requires requires(const T& l, const T& r) { - { std::less<>{}(l, r) } -> stdex::convertible_to; + { std::less<>{}(l, r) } -> std::convertible_to; } struct less_traits { bool operator()(const T& l, const T& r) const { diff --git a/headers/meta.hpp/meta_detail/value_traits/ostream_traits.hpp b/headers/meta.hpp/meta_detail/value_traits/ostream_traits.hpp index 3a21532..833edb0 100644 --- a/headers/meta.hpp/meta_detail/value_traits/ostream_traits.hpp +++ b/headers/meta.hpp/meta_detail/value_traits/ostream_traits.hpp @@ -16,7 +16,7 @@ namespace meta_hpp::detail template < typename T > concept has_ostream_traits = requires(std::ostream& os, const T& v) { - { ostream_traits{}(os, v) } -> stdex::convertible_to; + { ostream_traits{}(os, v) } -> std::convertible_to; }; } @@ -24,7 +24,7 @@ namespace meta_hpp::detail { template < typename T > requires requires(std::ostream& os, const T& v) { - { os << v } -> stdex::convertible_to; + { os << v } -> std::convertible_to; } struct ostream_traits { std::ostream& operator()(std::ostream& os, const T& v) const { diff --git a/headers/meta.hpp/meta_detail/value_utilities/utraits.hpp b/headers/meta.hpp/meta_detail/value_utilities/utraits.hpp index 655cba8..3abead3 100644 --- a/headers/meta.hpp/meta_detail/value_utilities/utraits.hpp +++ b/headers/meta.hpp/meta_detail/value_utilities/utraits.hpp @@ -13,11 +13,11 @@ namespace meta_hpp::detail { template < typename T > inline constexpr bool is_uvalue_kind_v = - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as; template < typename T > concept uvalue_kind = is_uvalue_kind_v; diff --git a/headers/meta.hpp/meta_states.hpp b/headers/meta.hpp/meta_states.hpp index 8fc8565..8220cf6 100644 --- a/headers/meta.hpp/meta_states.hpp +++ b/headers/meta.hpp/meta_states.hpp @@ -52,33 +52,33 @@ namespace meta_hpp template < typename Policy > inline constexpr bool is_constructor_policy_v = - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as; template < typename Policy > inline constexpr bool is_function_policy_v = - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as; template < typename Policy > inline constexpr bool is_member_policy_v = - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as; template < typename Policy > inline constexpr bool is_method_policy_v = - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as; template < typename Policy > inline constexpr bool is_variable_policy_v = - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as; template < typename Policy > concept constructor_policy_kind = is_constructor_policy_v; diff --git a/headers/meta.hpp/meta_states/constructor.hpp b/headers/meta.hpp/meta_states/constructor.hpp index 364bba0..875ede7 100644 --- a/headers/meta.hpp/meta_states/constructor.hpp +++ b/headers/meta.hpp/meta_states/constructor.hpp @@ -21,14 +21,14 @@ namespace meta_hpp::detail using argument_types = typename ct::argument_types; constexpr bool as_object = - stdex::copy_constructible && - stdex::same_as; + std::copy_constructible && + std::same_as; constexpr bool as_raw_ptr = - stdex::same_as; + std::same_as; constexpr bool as_shared_ptr = - stdex::same_as; + std::same_as; static_assert(as_object || as_raw_ptr || as_shared_ptr); diff --git a/headers/meta.hpp/meta_states/function.hpp b/headers/meta.hpp/meta_states/function.hpp index 779a6ba..2b19e78 100644 --- a/headers/meta.hpp/meta_states/function.hpp +++ b/headers/meta.hpp/meta_states/function.hpp @@ -21,16 +21,16 @@ namespace meta_hpp::detail using argument_types = typename ft::argument_types; constexpr bool as_copy = - stdex::copy_constructible && - stdex::same_as; + std::copy_constructible && + std::same_as; constexpr bool as_void = std::is_void_v || - stdex::same_as; + std::same_as; constexpr bool ref_as_ptr = std::is_reference_v && - stdex::same_as; + std::same_as; static_assert(as_copy || as_void || ref_as_ptr); @@ -47,7 +47,7 @@ namespace meta_hpp::detail function( args[Is].cast>()...); return uvalue{}; - } else if constexpr ( stdex::same_as ) { + } else if constexpr ( std::same_as ) { std::ignore = function( args[Is].cast>()...); return uvalue{}; diff --git a/headers/meta.hpp/meta_states/member.hpp b/headers/meta.hpp/meta_states/member.hpp index 8707cdb..31e571e 100644 --- a/headers/meta.hpp/meta_states/member.hpp +++ b/headers/meta.hpp/meta_states/member.hpp @@ -22,14 +22,14 @@ namespace meta_hpp::detail using value_type = typename mt::value_type; constexpr bool as_copy = - stdex::copy_constructible && - stdex::same_as; + std::copy_constructible && + std::same_as; constexpr bool as_ptr = - stdex::same_as; + std::same_as; constexpr bool as_ref_wrap = - stdex::same_as; + std::same_as; static_assert(as_copy || as_ptr || as_ref_wrap); diff --git a/headers/meta.hpp/meta_states/method.hpp b/headers/meta.hpp/meta_states/method.hpp index d5ec38d..5e552d5 100644 --- a/headers/meta.hpp/meta_states/method.hpp +++ b/headers/meta.hpp/meta_states/method.hpp @@ -23,16 +23,16 @@ namespace meta_hpp::detail using argument_types = typename mt::argument_types; constexpr bool as_copy = - stdex::copy_constructible && - stdex::same_as; + std::copy_constructible && + std::same_as; constexpr bool as_void = std::is_void_v || - stdex::same_as; + std::same_as; constexpr bool ref_as_ptr = std::is_reference_v && - stdex::same_as; + std::same_as; static_assert(as_copy || as_void || ref_as_ptr); @@ -53,7 +53,7 @@ namespace meta_hpp::detail (inst.cast().*method)( args[Is].cast>()...); return uvalue{}; - } else if constexpr ( stdex::same_as ) { + } else if constexpr ( std::same_as ) { std::ignore = (inst.cast().*method)( args[Is].cast>()...); return uvalue{}; diff --git a/headers/meta.hpp/meta_states/variable.hpp b/headers/meta.hpp/meta_states/variable.hpp index 657dee5..070ee6d 100644 --- a/headers/meta.hpp/meta_states/variable.hpp +++ b/headers/meta.hpp/meta_states/variable.hpp @@ -20,14 +20,14 @@ namespace meta_hpp::detail using data_type = typename pt::data_type; constexpr bool as_copy = - stdex::copy_constructible && - stdex::same_as; + std::copy_constructible && + std::same_as; constexpr bool as_ptr = - stdex::same_as; + std::same_as; constexpr bool as_ref_wrap = - stdex::same_as; + std::same_as; static_assert(as_copy || as_ptr || as_ref_wrap); diff --git a/headers/meta.hpp/meta_uvalue.hpp b/headers/meta.hpp/meta_uvalue.hpp index 80beb74..f4cc7eb 100644 --- a/headers/meta.hpp/meta_uvalue.hpp +++ b/headers/meta.hpp/meta_uvalue.hpp @@ -12,7 +12,7 @@ namespace meta_hpp::detail { template < typename T > - inline constexpr bool is_value_kind_v = stdex::same_as; + inline constexpr bool is_value_kind_v = std::same_as; template < typename T > concept value_kind = is_value_kind_v; @@ -38,12 +38,12 @@ namespace meta_hpp uvalue& operator=(const uvalue& other); template < detail::decay_non_value_kind T > - requires stdex::copy_constructible> + requires std::copy_constructible> // NOLINTNEXTLINE(*-forwarding-reference-overload) explicit uvalue(T&& val); template < detail::decay_non_value_kind T > - requires stdex::copy_constructible> + requires std::copy_constructible> uvalue& operator=(T&& val); [[nodiscard]] bool is_valid() const noexcept; diff --git a/headers/meta.hpp/meta_uvalue/uvalue.hpp b/headers/meta.hpp/meta_uvalue/uvalue.hpp index 6aa09d5..977a8db 100644 --- a/headers/meta.hpp/meta_uvalue/uvalue.hpp +++ b/headers/meta.hpp/meta_uvalue/uvalue.hpp @@ -271,14 +271,14 @@ namespace meta_hpp } template < detail::decay_non_value_kind T > - requires stdex::copy_constructible> + requires std::copy_constructible> // NOLINTNEXTLINE(*-forwarding-reference-overload) uvalue::uvalue(T&& val) { vtable_t::construct(*this, std::forward(val)); } template < detail::decay_non_value_kind T > - requires stdex::copy_constructible> + requires std::copy_constructible> uvalue& uvalue::operator=(T&& val) { uvalue{std::forward(val)}.swap(*this); return *this; @@ -329,7 +329,7 @@ namespace meta_hpp template < typename T > auto uvalue::get_as() -> std::conditional_t, T, T&> { - static_assert(stdex::same_as>); + static_assert(std::same_as>); if constexpr ( detail::pointer_kind ) { if ( T ptr = try_get_as(); ptr || get_type().is_nullptr() ) { @@ -346,7 +346,7 @@ namespace meta_hpp template < typename T > auto uvalue::get_as() const -> std::conditional_t, T, const T&> { - static_assert(stdex::same_as>); + static_assert(std::same_as>); if constexpr ( detail::pointer_kind ) { if ( T ptr = try_get_as(); ptr || get_type().is_nullptr() ) { @@ -364,7 +364,7 @@ namespace meta_hpp template < typename T > // NOLINTNEXTLINE(*-cognitive-complexity) auto uvalue::try_get_as() noexcept -> std::conditional_t, T, T*> { - static_assert(stdex::same_as>); + static_assert(std::same_as>); const any_type& from_type = get_type(); const any_type& to_type = resolve_type(); @@ -429,7 +429,7 @@ namespace meta_hpp template < typename T > // NOLINTNEXTLINE(*-cognitive-complexity) auto uvalue::try_get_as() const noexcept -> std::conditional_t, T, const T*> { - static_assert(stdex::same_as>); + static_assert(std::same_as>); const any_type& from_type = get_type(); const any_type& to_type = resolve_type(); diff --git a/singles/headers/meta.hpp/meta_all.hpp b/singles/headers/meta.hpp/meta_all.hpp index b669d8b..6da184e 100644 --- a/singles/headers/meta.hpp/meta_all.hpp +++ b/singles/headers/meta.hpp/meta_all.hpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -269,53 +270,6 @@ namespace meta_hpp::detail using copy_cvref_t = typename copy_cvref::type; } -namespace meta_hpp::stdex -{ - template < typename T, typename U > - concept same_as = - std::is_same_v && - std::is_same_v; - - template < typename Derived, typename Base > - concept derived_from = - std::is_base_of_v && - std::is_convertible_v; - - template < typename From, typename To > - concept convertible_to = - std::is_convertible_v && - requires { static_cast(std::declval()); }; - - template < typename T > - concept destructible = - std::is_nothrow_destructible_v; - - template < typename T, typename... Args > - concept constructible_from = - destructible && - std::is_constructible_v; - - template < typename T > - concept move_constructible = - constructible_from && - convertible_to; - - template - concept copy_constructible = - move_constructible && - constructible_from && convertible_to && - constructible_from && convertible_to && - constructible_from && convertible_to; -} - -namespace meta_hpp::stdex -{ - template < typename Enum > - [[nodiscard]] constexpr std::underlying_type_t to_underlying(Enum e) noexcept { - return static_cast>(e); - } -} - namespace meta_hpp::detail { template < typename Function > @@ -346,14 +300,14 @@ namespace meta_hpp::detail } template < typename Functor > - requires (!stdex::same_as>) + requires (!std::same_as>) // NOLINTNEXTLINE(*-forwarding-reference-overload) fixed_function(Functor&& functor) { vtable_t::construct(*this, std::forward(functor)); } template < typename Functor > - requires (!stdex::same_as>) + requires (!std::same_as>) fixed_function& operator=(Functor&& functor) { fixed_function{std::forward(functor)}.swap(*this); return *this; @@ -596,6 +550,14 @@ namespace meta_hpp::detail } } +namespace meta_hpp::stdex +{ + template < typename Enum > + [[nodiscard]] constexpr std::underlying_type_t to_underlying(Enum e) noexcept { + return static_cast>(e); + } +} + namespace meta_hpp::detail { template < typename... Types > @@ -908,20 +870,20 @@ namespace meta_hpp::detail { template < typename T > inline constexpr bool is_type_family_v = - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as; template < typename T > concept type_family = is_type_family_v; @@ -2030,15 +1992,15 @@ namespace meta_hpp::detail { template < typename T > inline constexpr bool is_index_family_v = - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as; template < typename T > concept index_family = is_index_family_v; @@ -2224,7 +2186,7 @@ namespace std namespace meta_hpp::detail { template < typename T > - inline constexpr bool is_value_kind_v = stdex::same_as; + inline constexpr bool is_value_kind_v = std::same_as; template < typename T > concept value_kind = is_value_kind_v; @@ -2250,12 +2212,12 @@ namespace meta_hpp uvalue& operator=(const uvalue& other); template < detail::decay_non_value_kind T > - requires stdex::copy_constructible> + requires std::copy_constructible> // NOLINTNEXTLINE(*-forwarding-reference-overload) explicit uvalue(T&& val); template < detail::decay_non_value_kind T > - requires stdex::copy_constructible> + requires std::copy_constructible> uvalue& operator=(T&& val); [[nodiscard]] bool is_valid() const noexcept; @@ -2314,15 +2276,15 @@ namespace meta_hpp::detail { template < typename T > inline constexpr bool is_state_family_v = - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as; template < typename T > concept state_family = is_state_family_v; @@ -2372,33 +2334,33 @@ namespace meta_hpp template < typename Policy > inline constexpr bool is_constructor_policy_v = - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as; template < typename Policy > inline constexpr bool is_function_policy_v = - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as; template < typename Policy > inline constexpr bool is_member_policy_v = - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as; template < typename Policy > inline constexpr bool is_method_policy_v = - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as; template < typename Policy > inline constexpr bool is_variable_policy_v = - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as; template < typename Policy > concept constructor_policy_kind = is_constructor_policy_v; @@ -3161,17 +3123,17 @@ namespace meta_hpp::detail template < typename Class, typename Base > concept class_bind_base_kind = class_kind && class_kind && - stdex::derived_from; + std::derived_from; template < typename Class, typename Member > concept class_bind_member_kind = class_kind && member_kind && - stdex::same_as::class_type>; + std::same_as::class_type>; template < typename Class, typename Method > concept class_bind_method_kind = class_kind && method_kind && - stdex::same_as::class_type>; + std::same_as::class_type>; } namespace meta_hpp @@ -4660,11 +4622,11 @@ namespace meta_hpp::detail { template < typename T > inline constexpr bool is_uvalue_kind_v = - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as || - stdex::same_as; + std::same_as || + std::same_as || + std::same_as || + std::same_as || + std::same_as; template < typename T > concept uvalue_kind = is_uvalue_kind_v; @@ -5153,14 +5115,14 @@ namespace meta_hpp::detail using argument_types = typename ct::argument_types; constexpr bool as_object = - stdex::copy_constructible && - stdex::same_as; + std::copy_constructible && + std::same_as; constexpr bool as_raw_ptr = - stdex::same_as; + std::same_as; constexpr bool as_shared_ptr = - stdex::same_as; + std::same_as; static_assert(as_object || as_raw_ptr || as_shared_ptr); @@ -5679,16 +5641,16 @@ namespace meta_hpp::detail using argument_types = typename ft::argument_types; constexpr bool as_copy = - stdex::copy_constructible && - stdex::same_as; + std::copy_constructible && + std::same_as; constexpr bool as_void = std::is_void_v || - stdex::same_as; + std::same_as; constexpr bool ref_as_ptr = std::is_reference_v && - stdex::same_as; + std::same_as; static_assert(as_copy || as_void || ref_as_ptr); @@ -5705,7 +5667,7 @@ namespace meta_hpp::detail function( args[Is].cast>()...); return uvalue{}; - } else if constexpr ( stdex::same_as ) { + } else if constexpr ( std::same_as ) { std::ignore = function( args[Is].cast>()...); return uvalue{}; @@ -6156,14 +6118,14 @@ namespace meta_hpp::detail using value_type = typename mt::value_type; constexpr bool as_copy = - stdex::copy_constructible && - stdex::same_as; + std::copy_constructible && + std::same_as; constexpr bool as_ptr = - stdex::same_as; + std::same_as; constexpr bool as_ref_wrap = - stdex::same_as; + std::same_as; static_assert(as_copy || as_ptr || as_ref_wrap); @@ -6453,16 +6415,16 @@ namespace meta_hpp::detail using argument_types = typename mt::argument_types; constexpr bool as_copy = - stdex::copy_constructible && - stdex::same_as; + std::copy_constructible && + std::same_as; constexpr bool as_void = std::is_void_v || - stdex::same_as; + std::same_as; constexpr bool ref_as_ptr = std::is_reference_v && - stdex::same_as; + std::same_as; static_assert(as_copy || as_void || ref_as_ptr); @@ -6483,7 +6445,7 @@ namespace meta_hpp::detail (inst.cast().*method)( args[Is].cast>()...); return uvalue{}; - } else if constexpr ( stdex::same_as ) { + } else if constexpr ( std::same_as ) { std::ignore = (inst.cast().*method)( args[Is].cast>()...); return uvalue{}; @@ -6702,14 +6664,14 @@ namespace meta_hpp::detail using data_type = typename pt::data_type; constexpr bool as_copy = - stdex::copy_constructible && - stdex::same_as; + std::copy_constructible && + std::same_as; constexpr bool as_ptr = - stdex::same_as; + std::same_as; constexpr bool as_ref_wrap = - stdex::same_as; + std::same_as; static_assert(as_copy || as_ptr || as_ref_wrap); @@ -7863,34 +7825,34 @@ namespace meta_hpp::detail template < typename T > concept has_deref_traits = requires(const T& v) { - { deref_traits{}(v) } -> stdex::convertible_to; + { deref_traits{}(v) } -> std::convertible_to; }; } namespace meta_hpp::detail { - template < stdex::copy_constructible T > + template < std::copy_constructible T > struct deref_traits { uvalue operator()(T* v) const { return uvalue{*v}; } }; - template < stdex::copy_constructible T > + template < std::copy_constructible T > struct deref_traits { uvalue operator()(const T* v) const { return uvalue{*v}; } }; - template < stdex::copy_constructible T > + template < std::copy_constructible T > struct deref_traits> { uvalue operator()(const std::shared_ptr& v) const { return uvalue{*v}; } }; - template < stdex::copy_constructible T > + template < std::copy_constructible T > struct deref_traits> { uvalue operator()(const std::unique_ptr& v) const { return uvalue{*v}; @@ -7905,7 +7867,7 @@ namespace meta_hpp::detail template < typename T > concept has_equals_traits = requires(const T& l, const T& r) { - { equals_traits{}(l, r) } -> stdex::convertible_to; + { equals_traits{}(l, r) } -> std::convertible_to; }; } @@ -7913,7 +7875,7 @@ namespace meta_hpp::detail { template < typename T > requires requires(const T& l, const T& r) { - { std::equal_to<>{}(l, r) } -> stdex::convertible_to; + { std::equal_to<>{}(l, r) } -> std::convertible_to; } struct equals_traits { bool operator()(const T& l, const T& r) const { @@ -7929,13 +7891,13 @@ namespace meta_hpp::detail template < typename T > concept has_index_traits = requires(const T& v, std::size_t i) { - { index_traits{}(v, i) } -> stdex::convertible_to; + { index_traits{}(v, i) } -> std::convertible_to; }; } namespace meta_hpp::detail { - template < stdex::copy_constructible T > + template < std::copy_constructible T > struct index_traits { uvalue operator()(T* v, std::size_t i) const { // NOLINTNEXTLINE(*-pointer-arithmetic) @@ -7943,7 +7905,7 @@ namespace meta_hpp::detail } }; - template < stdex::copy_constructible T > + template < std::copy_constructible T > struct index_traits { uvalue operator()(const T* v, std::size_t i) const { // NOLINTNEXTLINE(*-pointer-arithmetic) @@ -7951,28 +7913,28 @@ namespace meta_hpp::detail } }; - template < stdex::copy_constructible T, std::size_t Size > + template < std::copy_constructible T, std::size_t Size > struct index_traits> { uvalue operator()(const std::array& v, std::size_t i) const { return uvalue{v[i]}; } }; - template < stdex::copy_constructible T, std::size_t Extent > + template < std::copy_constructible T, std::size_t Extent > struct index_traits> { uvalue operator()(const std::span& v, std::size_t i) const { return uvalue{v[i]}; } }; - template < stdex::copy_constructible T, typename Traits, typename Allocator > + template < std::copy_constructible T, typename Traits, typename Allocator > struct index_traits> { uvalue operator()(const std::basic_string& v, std::size_t i) const { return uvalue{v[i]}; } }; - template < stdex::copy_constructible T, typename Allocator > + template < std::copy_constructible T, typename Allocator > struct index_traits> { uvalue operator()(const std::vector& v, std::size_t i) { return uvalue{v[i]}; @@ -7987,7 +7949,7 @@ namespace meta_hpp::detail template < typename T > concept has_istream_traits = requires(std::istream& is, T& v) { - { istream_traits{}(is, v) } -> stdex::convertible_to; + { istream_traits{}(is, v) } -> std::convertible_to; }; } @@ -7995,7 +7957,7 @@ namespace meta_hpp::detail { template < typename T > requires requires(std::istream& is, T& v) { - { is >> v } -> stdex::convertible_to; + { is >> v } -> std::convertible_to; } struct istream_traits { std::istream& operator()(std::istream& is, T& v) const { @@ -8011,7 +7973,7 @@ namespace meta_hpp::detail template < typename T > concept has_less_traits = requires(const T& l, const T& r) { - { less_traits{}(l, r) } -> stdex::convertible_to; + { less_traits{}(l, r) } -> std::convertible_to; }; } @@ -8019,7 +7981,7 @@ namespace meta_hpp::detail { template < typename T > requires requires(const T& l, const T& r) { - { std::less<>{}(l, r) } -> stdex::convertible_to; + { std::less<>{}(l, r) } -> std::convertible_to; } struct less_traits { bool operator()(const T& l, const T& r) const { @@ -8035,7 +7997,7 @@ namespace meta_hpp::detail template < typename T > concept has_ostream_traits = requires(std::ostream& os, const T& v) { - { ostream_traits{}(os, v) } -> stdex::convertible_to; + { ostream_traits{}(os, v) } -> std::convertible_to; }; } @@ -8043,7 +8005,7 @@ namespace meta_hpp::detail { template < typename T > requires requires(std::ostream& os, const T& v) { - { os << v } -> stdex::convertible_to; + { os << v } -> std::convertible_to; } struct ostream_traits { std::ostream& operator()(std::ostream& os, const T& v) const { @@ -8304,14 +8266,14 @@ namespace meta_hpp } template < detail::decay_non_value_kind T > - requires stdex::copy_constructible> + requires std::copy_constructible> // NOLINTNEXTLINE(*-forwarding-reference-overload) uvalue::uvalue(T&& val) { vtable_t::construct(*this, std::forward(val)); } template < detail::decay_non_value_kind T > - requires stdex::copy_constructible> + requires std::copy_constructible> uvalue& uvalue::operator=(T&& val) { uvalue{std::forward(val)}.swap(*this); return *this; @@ -8362,7 +8324,7 @@ namespace meta_hpp template < typename T > auto uvalue::get_as() -> std::conditional_t, T, T&> { - static_assert(stdex::same_as>); + static_assert(std::same_as>); if constexpr ( detail::pointer_kind ) { if ( T ptr = try_get_as(); ptr || get_type().is_nullptr() ) { @@ -8379,7 +8341,7 @@ namespace meta_hpp template < typename T > auto uvalue::get_as() const -> std::conditional_t, T, const T&> { - static_assert(stdex::same_as>); + static_assert(std::same_as>); if constexpr ( detail::pointer_kind ) { if ( T ptr = try_get_as(); ptr || get_type().is_nullptr() ) { @@ -8397,7 +8359,7 @@ namespace meta_hpp template < typename T > // NOLINTNEXTLINE(*-cognitive-complexity) auto uvalue::try_get_as() noexcept -> std::conditional_t, T, T*> { - static_assert(stdex::same_as>); + static_assert(std::same_as>); const any_type& from_type = get_type(); const any_type& to_type = resolve_type(); @@ -8462,7 +8424,7 @@ namespace meta_hpp template < typename T > // NOLINTNEXTLINE(*-cognitive-complexity) auto uvalue::try_get_as() const noexcept -> std::conditional_t, T, const T*> { - static_assert(stdex::same_as>); + static_assert(std::same_as>); const any_type& from_type = get_type(); const any_type& to_type = resolve_type(); diff --git a/untests/meta_utilities/detail_tests.cpp b/untests/meta_utilities/detail_tests.cpp index f72d4da..3293904 100644 --- a/untests/meta_utilities/detail_tests.cpp +++ b/untests/meta_utilities/detail_tests.cpp @@ -57,28 +57,28 @@ TEST_CASE("meta/meta_utilities/detail") { } SUBCASE("cvref_traits::copy_to") { - static_assert(meta::stdex::same_as::copy_to, int>); - static_assert(meta::stdex::same_as::copy_to, const int>); - static_assert(meta::stdex::same_as::copy_to, const volatile int>); - static_assert(meta::stdex::same_as::copy_to, int&>); - static_assert(meta::stdex::same_as::copy_to, const int&>); - static_assert(meta::stdex::same_as::copy_to, volatile int&>); - static_assert(meta::stdex::same_as::copy_to, const volatile int&&>); + static_assert(std::same_as::copy_to, int>); + static_assert(std::same_as::copy_to, const int>); + static_assert(std::same_as::copy_to, const volatile int>); + static_assert(std::same_as::copy_to, int&>); + static_assert(std::same_as::copy_to, const int&>); + static_assert(std::same_as::copy_to, volatile int&>); + static_assert(std::same_as::copy_to, const volatile int&&>); - static_assert(meta::stdex::same_as::copy_to, int>); - static_assert(meta::stdex::same_as::copy_to, const int>); - static_assert(meta::stdex::same_as::copy_to, const volatile int>); - static_assert(meta::stdex::same_as::copy_to, int&>); - static_assert(meta::stdex::same_as::copy_to, const int&>); - static_assert(meta::stdex::same_as::copy_to, volatile int&>); - static_assert(meta::stdex::same_as::copy_to, const volatile int&&>); + static_assert(std::same_as::copy_to, int>); + static_assert(std::same_as::copy_to, const int>); + static_assert(std::same_as::copy_to, const volatile int>); + static_assert(std::same_as::copy_to, int&>); + static_assert(std::same_as::copy_to, const int&>); + static_assert(std::same_as::copy_to, volatile int&>); + static_assert(std::same_as::copy_to, const volatile int&&>); - static_assert(meta::stdex::same_as::copy_to, int>); - static_assert(meta::stdex::same_as::copy_to, const int>); - static_assert(meta::stdex::same_as::copy_to, const volatile int>); - static_assert(meta::stdex::same_as::copy_to, int&>); - static_assert(meta::stdex::same_as::copy_to, const int&>); - static_assert(meta::stdex::same_as::copy_to, volatile int&>); - static_assert(meta::stdex::same_as::copy_to, const volatile int&&>); + static_assert(std::same_as::copy_to, int>); + static_assert(std::same_as::copy_to, const int>); + static_assert(std::same_as::copy_to, const volatile int>); + static_assert(std::same_as::copy_to, int&>); + static_assert(std::same_as::copy_to, const int&>); + static_assert(std::same_as::copy_to, volatile int&>); + static_assert(std::same_as::copy_to, const volatile int&&>); } } diff --git a/untests/meta_utilities/value3_tests.cpp b/untests/meta_utilities/value3_tests.cpp index 19297c5..4912a1a 100644 --- a/untests/meta_utilities/value3_tests.cpp +++ b/untests/meta_utilities/value3_tests.cpp @@ -90,20 +90,20 @@ TEST_CASE("meta/meta_utilities/value4/get_type") { TEST_CASE("meta/meta_utilities/value4/get_as") { namespace meta = meta_hpp; - static_assert(meta::stdex::same_as().get_as()), derived&>); - static_assert(meta::stdex::same_as().get_as()), derived&>); - static_assert(meta::stdex::same_as().get_as()), const derived&>); - static_assert(meta::stdex::same_as().get_as()), const derived&>); + static_assert(std::same_as().get_as()), derived&>); + static_assert(std::same_as().get_as()), derived&>); + static_assert(std::same_as().get_as()), const derived&>); + static_assert(std::same_as().get_as()), const derived&>); - static_assert(meta::stdex::same_as().get_as()), derived*>); - static_assert(meta::stdex::same_as().get_as()), derived*>); - static_assert(meta::stdex::same_as().get_as()), derived*>); - static_assert(meta::stdex::same_as().get_as()), derived*>); + static_assert(std::same_as().get_as()), derived*>); + static_assert(std::same_as().get_as()), derived*>); + static_assert(std::same_as().get_as()), derived*>); + static_assert(std::same_as().get_as()), derived*>); - static_assert(meta::stdex::same_as().get_as()), const derived*>); - static_assert(meta::stdex::same_as().get_as()), const derived*>); - static_assert(meta::stdex::same_as().get_as()), const derived*>); - static_assert(meta::stdex::same_as().get_as()), const derived*>); + static_assert(std::same_as().get_as()), const derived*>); + static_assert(std::same_as().get_as()), const derived*>); + static_assert(std::same_as().get_as()), const derived*>); + static_assert(std::same_as().get_as()), const derived*>); SUBCASE("derived to derived") { { @@ -209,20 +209,20 @@ TEST_CASE("meta/meta_utilities/value4/get_as") { TEST_CASE("meta/meta_utilities/value4/try_get_as") { namespace meta = meta_hpp; - static_assert(meta::stdex::same_as().try_get_as()), derived*>); - static_assert(meta::stdex::same_as().try_get_as()), derived*>); - static_assert(meta::stdex::same_as().try_get_as()), const derived*>); - static_assert(meta::stdex::same_as().try_get_as()), const derived*>); + static_assert(std::same_as().try_get_as()), derived*>); + static_assert(std::same_as().try_get_as()), derived*>); + static_assert(std::same_as().try_get_as()), const derived*>); + static_assert(std::same_as().try_get_as()), const derived*>); - static_assert(meta::stdex::same_as().try_get_as()), derived*>); - static_assert(meta::stdex::same_as().try_get_as()), derived*>); - static_assert(meta::stdex::same_as().try_get_as()), derived*>); - static_assert(meta::stdex::same_as().try_get_as()), derived*>); + static_assert(std::same_as().try_get_as()), derived*>); + static_assert(std::same_as().try_get_as()), derived*>); + static_assert(std::same_as().try_get_as()), derived*>); + static_assert(std::same_as().try_get_as()), derived*>); - static_assert(meta::stdex::same_as().try_get_as()), const derived*>); - static_assert(meta::stdex::same_as().try_get_as()), const derived*>); - static_assert(meta::stdex::same_as().try_get_as()), const derived*>); - static_assert(meta::stdex::same_as().try_get_as()), const derived*>); + static_assert(std::same_as().try_get_as()), const derived*>); + static_assert(std::same_as().try_get_as()), const derived*>); + static_assert(std::same_as().try_get_as()), const derived*>); + static_assert(std::same_as().try_get_as()), const derived*>); SUBCASE("derived to derived") { { diff --git a/untests/meta_utilities/value_tests.cpp b/untests/meta_utilities/value_tests.cpp index a41a5ee..05d272f 100644 --- a/untests/meta_utilities/value_tests.cpp +++ b/untests/meta_utilities/value_tests.cpp @@ -104,16 +104,16 @@ TEST_CASE("meta/meta_utilities/value") { ivec2::copy_constructor_counter = 0; SUBCASE("cast types") { - static_assert(meta::stdex::same_as< + static_assert(std::same_as< decltype(std::declval().get_as()), ivec2&>); - static_assert(meta::stdex::same_as< + static_assert(std::same_as< decltype(std::declval().get_as()), ivec2&>); - static_assert(meta::stdex::same_as< + static_assert(std::same_as< decltype(std::declval().get_as()), const ivec2&>); - static_assert(meta::stdex::same_as< + static_assert(std::same_as< decltype(std::declval().get_as()), const ivec2&>); }