11 #define TVM_CREATE_HAS_MEMBER_TYPE_TRAIT_FOR(Type) \
12 namespace tvm::internal \
14 struct has_type_##Type##_helper \
16 template<typename T> \
17 std::false_type has(...); \
19 template<typename T> \
20 std::true_type has(typename T::Type *); \
23 template<typename T> \
24 using has_public_member_type_##Type = decltype(has_type_##Type##_helper{}.has<T>(nullptr)); \
32 template<
template<
typename...>
class Base>
36 template<
typename... T>
37 static std::true_type
check(Base<T...>
const volatile &);
39 static std::false_type
check(...);
50 template<
typename T,
template<
typename...>
class Base>
57 template<
typename T,
typename Base>
59 {
return std::is_base_of_v<Base, T>; }
67 template<
typename T,
typename... Base>
68 using enable_for_t = std::enable_if_t<(... || (std::is_same_v<T, Base> || derives_from<T, Base>())),
int>;
76 template<
typename T,
template<
typename...>
class... Base>
80 template<
typename T,
template<
typename...>
class... Base>
94 template<
typename T,
bool c>
95 using const_if = std::conditional<c, const T, T>;
98 template<
typename T,
bool c>
constexpr bool derives_from()
Definition: meta.h:51
std::enable_if_t<!(...||derives_from< T, Base >()), int > disable_for_templated_t
Definition: meta.h:81
std::enable_if_t<(...||(std::is_same_v< T, Base >||derives_from< T, Base >())), int > enable_for_t
Definition: meta.h:68
std::enable_if_t<(...||derives_from< T, Base >()), int > enable_for_templated_t
Definition: meta.h:77
typename const_if< T, c >::type const_if_t
Definition: meta.h:99
std::conditional< c, const T, T > const_if
Definition: meta.h:95
static std::false_type check(...)
static std::true_type check(Base< T... > const volatile &)