From 8b46723fe28094c3eed2a604b426b5b108fecdfd Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Sat, 26 Oct 2024 19:09:30 +0200 Subject: [PATCH] refactor: `wrapped_type_t` reuses `std::indirectly_readable_traits` --- src/core/include/mp-units/ext/type_traits.h | 27 +++------------------ 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/src/core/include/mp-units/ext/type_traits.h b/src/core/include/mp-units/ext/type_traits.h index 965444f5..c93952c1 100644 --- a/src/core/include/mp-units/ext/type_traits.h +++ b/src/core/include/mp-units/ext/type_traits.h @@ -29,6 +29,7 @@ #ifdef MP_UNITS_IMPORT_STD import std; #else +#include #include #include #endif @@ -100,30 +101,10 @@ constexpr bool is_derived_from_specialization_of = requires(T* t) { detail::to_b template typename Type> constexpr bool is_derived_from_specialization_of_v = requires(T* t) { detail::to_base_specialization_of_v(t); }; -namespace detail { - template -struct get_value_type { - using type = T::value_type; -}; - -template -struct get_element_type { - using type = std::remove_reference_t; -}; - -} // namespace detail - -template - requires requires { typename T::value_type; } || requires { typename T::element_type; } -struct wrapped_type { - using type = - conditional, detail::get_element_type>::type; -}; - -template - requires requires { typename T::value_type; } || requires { typename T::element_type; } -using wrapped_type_t = wrapped_type::type; + requires(!std::is_pointer_v && !std::is_array_v) && + requires { typename std::indirectly_readable_traits::value_type; } +using wrapped_type_t = std::indirectly_readable_traits::value_type; template struct value_type {