14#ifndef RANGES_V3_UTILITY_COMMON_TYPE_HPP
15#define RANGES_V3_UTILITY_COMMON_TYPE_HPP
26#include <range/v3/detail/prologue.hpp>
37 template<
typename... Ts>
40 template<
typename... Ts>
41 using common_type_t = concepts::common_type_t<Ts...>;
43 template<
typename... Ts>
46 template<
typename... Ts>
47 using common_reference_t = concepts::common_reference_t<Ts...>;
50 template<
typename F,
typename S>
53 template<
typename... Ts>
63 template<
typename F1,
typename S1,
typename F2,
typename S2>
66 template<typename F1, typename S1, typename F2, typename S2>
67 struct common_type<::ranges::common_pair<F1, S1>, std::pair<F2, S2>>;
69 template<typename F1, typename S1, typename F2, typename S2>
70 struct common_type<::ranges::common_pair<F1, S1>, ::ranges::common_pair<F2, S2>>;
73 template<typename... Ts, typename... Us>
74 struct common_type<::ranges::common_tuple<Ts...>, std::tuple<Us...>>;
76 template<typename... Ts, typename... Us>
77 struct common_type<std::tuple<Ts...>, ::ranges::common_tuple<Us...>>;
79 template<typename... Ts, typename... Us>
80 struct common_type<::ranges::common_tuple<Ts...>, ::ranges::common_tuple<Us...>>;
83 template<typename F1, typename S1, typename F2, typename S2,
84 template<typename> class Qual1, template<typename> class Qual2>
85 struct basic_common_reference<::ranges::common_pair<F1, S1>, std::pair<F2, S2>, Qual1, Qual2>;
87 template<typename F1, typename S1, typename F2, typename S2,
88 template<typename> class Qual1, template<typename> class Qual2>
89 struct basic_common_reference<std::pair<F1, S1>, ::ranges::common_pair<F2, S2>, Qual1, Qual2>;
91 template<typename F1, typename S1, typename F2, typename S2,
92 template<typename> class Qual1, template<typename> class Qual2>
93 struct basic_common_reference<::ranges::common_pair<F1, S1>, ::ranges::common_pair<F2, S2>, Qual1, Qual2>;
96 template<typename... Ts, typename... Us, template<typename> class Qual1,
97 template<typename> class Qual2>
98 struct basic_common_reference<::ranges::common_tuple<Ts...>, std::tuple<Us...>, Qual1, Qual2>;
100 template<typename... Ts, typename... Us, template<typename> class Qual1,
101 template<typename> class Qual2>
102 struct basic_common_reference<std::tuple<Ts...>, ::ranges::common_tuple<Us...>, Qual1, Qual2>;
104 template<typename... Ts, typename... Us, template<typename> class Qual1,
105 template<typename> class Qual2>
106 struct basic_common_reference<::ranges::common_tuple<Ts...>, ::ranges::common_tuple<Us...>, Qual1, Qual2>;
109#if RANGES_CXX_VER > RANGES_CXX_STD_17
110RANGES_DIAGNOSTIC_PUSH
111RANGES_DIAGNOSTIC_IGNORE_MISMATCHED_TAGS
112RANGES_BEGIN_NAMESPACE_STD
113RANGES_BEGIN_NAMESPACE_VERSION
115 template<typename...>
119 template<typename F1, typename S1, typename F2, typename S2>
120 struct common_type<std::pair<F1, S1>, ::ranges::common_pair<F2, S2>>;
122 template<typename F1, typename S1, typename F2, typename S2>
123 struct common_type<::ranges::common_pair<F1, S1>, std::pair<F2, S2>>;
125 template<typename F1, typename S1, typename F2, typename S2>
126 struct common_type<::ranges::common_pair<F1, S1>, ::ranges::common_pair<F2, S2>>;
129 template<typename... Ts, typename... Us>
130 struct common_type<::ranges::common_tuple<Ts...>, std::tuple<Us...>>;
132 template<typename... Ts, typename... Us>
133 struct common_type<std::tuple<Ts...>, ::ranges::common_tuple<Us...>>;
135 template<typename... Ts, typename... Us>
136 struct common_type<::ranges::common_tuple<Ts...>, ::ranges::common_tuple<Us...>>;
138 template<typename, typename, template<typename> class, template<typename> class>
139 struct basic_common_reference;
142 template<typename F1, typename S1, typename F2, typename S2,
143 template<typename> class Qual1, template<typename> class Qual2>
144 struct basic_common_reference<::ranges::common_pair<F1, S1>, std::pair<F2, S2>, Qual1, Qual2>;
146 template<typename F1, typename S1, typename F2, typename S2,
147 template<typename> class Qual1, template<typename> class Qual2>
148 struct basic_common_reference<std::pair<F1, S1>, ::ranges::common_pair<F2, S2>, Qual1, Qual2>;
150 template<typename F1, typename S1, typename F2, typename S2,
151 template<typename> class Qual1, template<typename> class Qual2>
152 struct basic_common_reference<::ranges::common_pair<F1, S1>, ::ranges::common_pair<F2, S2>, Qual1, Qual2>;
155 template<typename... Ts, typename... Us, template<typename> class Qual1,
156 template<typename> class Qual2>
157 struct basic_common_reference<::ranges::common_tuple<Ts...>, std::tuple<Us...>, Qual1, Qual2>;
159 template<typename... Ts, typename... Us, template<typename> class Qual1,
160 template<typename> class Qual2>
161 struct basic_common_reference<std::tuple<Ts...>, ::ranges::common_tuple<Us...>, Qual1, Qual2>;
163 template<typename... Ts, typename... Us, template<typename> class Qual1,
164 template<typename> class Qual2>
165 struct basic_common_reference<::ranges::common_tuple<Ts...>, ::ranges::common_tuple<Us...>, Qual1, Qual2>;
167RANGES_END_NAMESPACE_VERSION
168RANGES_END_NAMESPACE_STD
173#include <range/v3/detail/epilogue.hpp>
list< F, S > pair
A list with exactly two elements.
Definition meta.hpp:2246
Users can specialize this to hook the common_reference_with concept.
Definition type_traits.hpp:356
Users should specialize this to hook the common_with concept until std gets a SFINAE-friendly std::co...
Definition type_traits.hpp:242
Definition common_tuple.hpp:313