@@ -41,6 +41,12 @@ constexpr auto derived_from =
41
41
template <typename T, typename U>
42
42
constexpr auto same_as = std::is_same_v<T, U> and std::is_same_v<U, T>;
43
43
44
+ template <typename T, typename ... Us>
45
+ constexpr auto same_any = (... or same_as<T, Us>);
46
+
47
+ template <typename T, typename ... Us>
48
+ constexpr auto same_none = not same_any<T, Us...>;
49
+
44
50
template <typename T, typename U>
45
51
constexpr auto same_as_unqualified =
46
52
is_same_unqualified_v<T, U> and is_same_unqualified_v<U, T>;
@@ -130,6 +136,12 @@ concept derived_from =
130
136
template <typename T, typename U>
131
137
concept same_as = std::is_same_v<T, U> and std::is_same_v<U, T>;
132
138
139
+ template <typename T, typename ... Us>
140
+ constexpr auto same_any = (... or same_as<T, Us>);
141
+
142
+ template <typename T, typename ... Us>
143
+ constexpr auto same_none = not same_any<T, Us...>;
144
+
133
145
template <typename T, typename U>
134
146
concept same_as_unqualified =
135
147
is_same_unqualified_v<T, U> and is_same_unqualified_v<U, T>;
@@ -222,6 +234,11 @@ concept same_as_unqualified =
222
234
template <typename T>
223
235
concept structural = is_structural_v<T>;
224
236
237
+ template <typename T, typename ... Us>
238
+ constexpr auto same_any = (... or same_as<T, Us>);
239
+
240
+ template <typename T, typename ... Us>
241
+ constexpr auto same_none = not same_any<T, Us...>;
225
242
} // namespace v1
226
243
} // namespace stdx
227
244
0 commit comments