@@ -41,6 +41,12 @@ constexpr auto derived_from =
4141template <typename T, typename U>
4242constexpr auto same_as = std::is_same_v<T, U> and std::is_same_v<U, T>;
4343
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+
4450template <typename T, typename U>
4551constexpr auto same_as_unqualified =
4652 is_same_unqualified_v<T, U> and is_same_unqualified_v<U, T>;
@@ -130,6 +136,12 @@ concept derived_from =
130136template <typename T, typename U>
131137concept same_as = std::is_same_v<T, U> and std::is_same_v<U, T>;
132138
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+
133145template <typename T, typename U>
134146concept same_as_unqualified =
135147 is_same_unqualified_v<T, U> and is_same_unqualified_v<U, T>;
@@ -222,6 +234,11 @@ concept same_as_unqualified =
222234template <typename T>
223235concept structural = is_structural_v<T>;
224236
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...>;
225242} // namespace v1
226243} // namespace stdx
227244
0 commit comments