diff --git a/include/eve/traits/value_type.hpp b/include/eve/traits/value_type.hpp index 8b559913651..de2f5558377 100644 --- a/include/eve/traits/value_type.hpp +++ b/include/eve/traits/value_type.hpp @@ -17,33 +17,36 @@ namespace eve { namespace detail { - template constexpr auto value_type_impl() + template + constexpr auto value_type_impl() { using ref = std::add_lvalue_reference_t; return value_type_impl()))>(); } - template constexpr auto value_type_impl() + template + constexpr auto value_type_impl() { return std::type_identity::value_type>{}; } - // Maybe this should be deleted - template constexpr auto value_type_impl() + template + constexpr auto value_type_impl() { - auto mapper = [](U) + if constexpr ( requires { typename T::value_type; } ) { - return typename decltype(value_type_impl())::type{}; - }; - - return std::type_identity>{}; - } + return std::type_identity{}; + } + // Maybe this should be deleted + else if constexpr ( kumi::product_type ) + { + auto mapper = [](U) + { + return typename decltype( value_type_impl() )::type{}; + }; - template - requires requires { typename T::value_type; } - constexpr auto value_type_impl() - { - return std::type_identity{}; + return std::type_identity>{}; + } } } @@ -70,7 +73,7 @@ namespace eve //! @} //================================================================================================ - template - requires (!value) + template + requires (!value) using value_type_t = typename decltype(detail::value_type_impl())::type; }