ECSTASY
All in the name
Loading...
Searching...
No Matches
type_set_eq.hpp
Go to the documentation of this file.
1
11
12#ifndef UTIL_META_TYPE_SET_EQ_HPP_
13#define UTIL_META_TYPE_SET_EQ_HPP_
14
15#include "contains.hpp"
16
17namespace util::meta
18{
29 template <typename, typename>
30 struct _type_set_eq : public std::false_type {};
31
32 // clang-format off
33
46 template <typename T1, typename... Ts1, typename... Ts2>
47 struct _type_set_eq<std::tuple<T1, Ts1...>, std::tuple<Ts2...>>: public
49 // If
50 util::meta::contains<T1, Ts2...> &&
51 ((sizeof...(Ts1) == 0) || _type_set_eq<std::tuple<Ts1...>, std::tuple<Ts2...>>::value),
52 // Then
53 std::true_type,
54 // Else
55 std::false_type
56 > {
57 };
58
66 template <>
67 struct _type_set_eq<std::tuple<>, std::tuple<>> : public std::true_type {
68 };
69
70 // clang-format on
71
81 template <typename, typename>
82 struct type_set_eq : public std::false_type {};
83
84 // clang-format off
85
97 template <typename... Ts1, typename... Ts2>
98 struct type_set_eq<std::tuple<Ts1...>, std::tuple<Ts2...>> : public
100 // If
101 (sizeof...(Ts1) == sizeof...(Ts2)) &&
102 _type_set_eq<std::tuple<Ts1...>, std::tuple<Ts2...>>::value,
103 // Then
104 std::true_type,
105 // Else
106 std::false_type > {
107 };
108 // clang-format on
109
119 template <typename Ts1, typename Ts2>
121} // namespace util::meta
122
123#endif /* !UTIL_META_TYPE_SET_EQ_HPP_ */
Checks if a type exists in a list of types.
Namespace regrouping all meta programmation helper types.
bool constexpr type_set_eq_v
Helper for type_set_eq.
Test if two tuple types contains the exact same type independently of the order.