File indexing completed on 2025-12-15 10:26:43
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef RANGES_V3_UTILITY_COMMON_TYPE_HPP
0015 #define RANGES_V3_UTILITY_COMMON_TYPE_HPP
0016
0017 #include <tuple>
0018 #include <utility>
0019
0020 #include <meta/meta.hpp>
0021
0022 #include <concepts/type_traits.hpp>
0023
0024 #include <range/v3/range_fwd.hpp>
0025
0026 #include <range/v3/detail/prologue.hpp>
0027
0028
0029
0030
0031
0032
0033
0034
0035 namespace ranges
0036 {
0037 template<typename... Ts>
0038 using common_type = concepts::common_type<Ts...>;
0039
0040 template<typename... Ts>
0041 using common_type_t = concepts::common_type_t<Ts...>;
0042
0043 template<typename... Ts>
0044 using common_reference = concepts::common_reference<Ts...>;
0045
0046 template<typename... Ts>
0047 using common_reference_t = concepts::common_reference_t<Ts...>;
0048
0049
0050 template<typename F, typename S>
0051 struct common_pair;
0052
0053 template<typename... Ts>
0054 struct common_tuple;
0055
0056 }
0057
0058
0059
0060 namespace concepts
0061 {
0062
0063 template<typename F1, typename S1, typename F2, typename S2>
0064 struct common_type<std::pair<F1, S1>, ::ranges::common_pair<F2, S2>>;
0065
0066 template<typename F1, typename S1, typename F2, typename S2>
0067 struct common_type<::ranges::common_pair<F1, S1>, std::pair<F2, S2>>;
0068
0069 template<typename F1, typename S1, typename F2, typename S2>
0070 struct common_type<::ranges::common_pair<F1, S1>, ::ranges::common_pair<F2, S2>>;
0071
0072
0073 template<typename... Ts, typename... Us>
0074 struct common_type<::ranges::common_tuple<Ts...>, std::tuple<Us...>>;
0075
0076 template<typename... Ts, typename... Us>
0077 struct common_type<std::tuple<Ts...>, ::ranges::common_tuple<Us...>>;
0078
0079 template<typename... Ts, typename... Us>
0080 struct common_type<::ranges::common_tuple<Ts...>, ::ranges::common_tuple<Us...>>;
0081
0082
0083 template<typename F1, typename S1, typename F2, typename S2,
0084 template<typename> class Qual1, template<typename> class Qual2>
0085 struct basic_common_reference<::ranges::common_pair<F1, S1>, std::pair<F2, S2>, Qual1, Qual2>;
0086
0087 template<typename F1, typename S1, typename F2, typename S2,
0088 template<typename> class Qual1, template<typename> class Qual2>
0089 struct basic_common_reference<std::pair<F1, S1>, ::ranges::common_pair<F2, S2>, Qual1, Qual2>;
0090
0091 template<typename F1, typename S1, typename F2, typename S2,
0092 template<typename> class Qual1, template<typename> class Qual2>
0093 struct basic_common_reference<::ranges::common_pair<F1, S1>, ::ranges::common_pair<F2, S2>, Qual1, Qual2>;
0094
0095
0096 template<typename... Ts, typename... Us, template<typename> class Qual1,
0097 template<typename> class Qual2>
0098 struct basic_common_reference<::ranges::common_tuple<Ts...>, std::tuple<Us...>, Qual1, Qual2>;
0099
0100 template<typename... Ts, typename... Us, template<typename> class Qual1,
0101 template<typename> class Qual2>
0102 struct basic_common_reference<std::tuple<Ts...>, ::ranges::common_tuple<Us...>, Qual1, Qual2>;
0103
0104 template<typename... Ts, typename... Us, template<typename> class Qual1,
0105 template<typename> class Qual2>
0106 struct basic_common_reference<::ranges::common_tuple<Ts...>, ::ranges::common_tuple<Us...>, Qual1, Qual2>;
0107 }
0108
0109 #if RANGES_CXX_VER > RANGES_CXX_STD_17
0110 RANGES_DIAGNOSTIC_PUSH
0111 RANGES_DIAGNOSTIC_IGNORE_MISMATCHED_TAGS
0112 RANGES_BEGIN_NAMESPACE_STD
0113 RANGES_BEGIN_NAMESPACE_VERSION
0114
0115 template<typename...>
0116 struct common_type;
0117
0118
0119 template<typename F1, typename S1, typename F2, typename S2>
0120 struct common_type<std::pair<F1, S1>, ::ranges::common_pair<F2, S2>>;
0121
0122 template<typename F1, typename S1, typename F2, typename S2>
0123 struct common_type<::ranges::common_pair<F1, S1>, std::pair<F2, S2>>;
0124
0125 template<typename F1, typename S1, typename F2, typename S2>
0126 struct common_type<::ranges::common_pair<F1, S1>, ::ranges::common_pair<F2, S2>>;
0127
0128
0129 template<typename... Ts, typename... Us>
0130 struct common_type<::ranges::common_tuple<Ts...>, std::tuple<Us...>>;
0131
0132 template<typename... Ts, typename... Us>
0133 struct common_type<std::tuple<Ts...>, ::ranges::common_tuple<Us...>>;
0134
0135 template<typename... Ts, typename... Us>
0136 struct common_type<::ranges::common_tuple<Ts...>, ::ranges::common_tuple<Us...>>;
0137
0138 template<typename, typename, template<typename> class, template<typename> class>
0139 struct basic_common_reference;
0140
0141
0142 template<typename F1, typename S1, typename F2, typename S2,
0143 template<typename> class Qual1, template<typename> class Qual2>
0144 struct basic_common_reference<::ranges::common_pair<F1, S1>, std::pair<F2, S2>, Qual1, Qual2>;
0145
0146 template<typename F1, typename S1, typename F2, typename S2,
0147 template<typename> class Qual1, template<typename> class Qual2>
0148 struct basic_common_reference<std::pair<F1, S1>, ::ranges::common_pair<F2, S2>, Qual1, Qual2>;
0149
0150 template<typename F1, typename S1, typename F2, typename S2,
0151 template<typename> class Qual1, template<typename> class Qual2>
0152 struct basic_common_reference<::ranges::common_pair<F1, S1>, ::ranges::common_pair<F2, S2>, Qual1, Qual2>;
0153
0154
0155 template<typename... Ts, typename... Us, template<typename> class Qual1,
0156 template<typename> class Qual2>
0157 struct basic_common_reference<::ranges::common_tuple<Ts...>, std::tuple<Us...>, Qual1, Qual2>;
0158
0159 template<typename... Ts, typename... Us, template<typename> class Qual1,
0160 template<typename> class Qual2>
0161 struct basic_common_reference<std::tuple<Ts...>, ::ranges::common_tuple<Us...>, Qual1, Qual2>;
0162
0163 template<typename... Ts, typename... Us, template<typename> class Qual1,
0164 template<typename> class Qual2>
0165 struct basic_common_reference<::ranges::common_tuple<Ts...>, ::ranges::common_tuple<Us...>, Qual1, Qual2>;
0166
0167 RANGES_END_NAMESPACE_VERSION
0168 RANGES_END_NAMESPACE_STD
0169 RANGES_DIAGNOSTIC_POP
0170 #endif
0171
0172
0173 #include <range/v3/detail/epilogue.hpp>
0174
0175 #endif