1 #ifndef INCG_PHI_CORE_TYPE_TRAITS_COMMON_TYPE_HPP 2 #define INCG_PHI_CORE_TYPE_TRAITS_COMMON_TYPE_HPP 4 #include "phi/phi_config.hpp" 6 #if PHI_HAS_EXTENSION_PRAGMA_ONCE() 10 #include "phi/core/declval.hpp" 11 #include "phi/type_traits/conditional.hpp" 12 #include "phi/type_traits/decay.hpp" 13 #include "phi/type_traits/is_same.hpp" 14 #include "phi/type_traits/remove_cvref.hpp" 15 #include "phi/type_traits/void_t.hpp" 17 DETAIL_PHI_BEGIN_NAMESPACE()
19 template <typename... TypesT>
25 template <
typename TypeT,
typename OtherT>
26 using condition_type = decltype(
false ? declval<TypeT>() : declval<OtherT>());
28 template <
typename TypeT,
typename OtherT,
typename =
void>
33 template <
typename TypeT,
typename OtherT>
34 struct common_type3_impl<TypeT, OtherT, void_t<condition_type<const TypeT&,
const OtherT&>>>
36 using type = remove_cvref_t<condition_type<const TypeT&, const OtherT&>>;
39 template <
typename TypeT,
typename OtherT,
typename =
void>
44 template <
typename TypeT,
typename OtherT>
47 typename void_t<decltype(true ? declval<TypeT>() : declval<OtherT>())>::type>
52 template <
typename,
typename =
void>
56 template <
typename... TypeT>
59 template <
typename TypeT,
typename OtherT>
61 typename void_t<typename common_type<TypeT, OtherT>::type>::type>
66 template <
typename TypeT,
typename OtherT,
typename ThirdT,
typename... RestT>
68 typename void_t<typename common_type<TypeT, OtherT>::type>::type>
70 common_types<typename common_type<TypeT, OtherT>::type, ThirdT, RestT...>>
82 template <
typename TypeT>
89 template <
typename TypeT,
typename OtherT>
92 is_same<TypeT, typename decay<TypeT>::type>::value &&
93 is_same<OtherT, typename decay<OtherT>::type>::value,
94 detail::common_type2_impl<TypeT, OtherT>,
95 common_type<typename decay<TypeT>::type, typename decay<OtherT>::type>>::type
100 template <
typename TypeT,
typename OtherT,
typename ThirdT,
typename... RestT>
105 template <
typename... TypeT>
106 using common_type_t =
typename common_type<TypeT...>::type;
108 DETAIL_PHI_END_NAMESPACE()
110 #endif // INCG_PHI_CORE_TYPE_TRAITS_COMMON_TYPE_HPP Definition: common_type.hpp:29
Definition: conditional.hpp:13
Definition: common_type.hpp:57
Definition: common_type.hpp:40
Definition: common_type.hpp:53
Definition: common_type.hpp:20