TVM  0.9.4
meta.h
Go to the documentation of this file.
1 
3 #pragma once
4 
5 #include <type_traits>
6 
11 #define TVM_CREATE_HAS_MEMBER_TYPE_TRAIT_FOR(Type) \
12  namespace tvm::internal \
13  { \
14  struct has_type_##Type##_helper \
15  { \
16  template<typename T> \
17  std::false_type has(...); \
18  \
19  template<typename T> \
20  std::true_type has(typename T::Type *); \
21  }; \
22  \
23  template<typename T> \
24  using has_public_member_type_##Type = decltype(has_type_##Type##_helper{}.has<T>(nullptr)); \
25  }
26 
27 namespace tvm
28 {
29 namespace internal
30 {
32 template<template<typename...> class Base>
33 struct is_base
34 {
36  template<typename... T>
37  static std::true_type check(Base<T...> const volatile &);
39  static std::false_type check(...);
40 };
41 
50 template<typename T, template<typename...> class Base>
51 constexpr bool derives_from()
52 { return decltype(is_base<Base>::check(std::declval<const T &>()))::value; }
53 
57 template<typename T, typename Base>
58 constexpr bool derives_from()
59 { return std::is_base_of_v<Base, T>; }
60 
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>;
69 
76 template<typename T, template<typename...> class... Base>
77 using enable_for_templated_t = std::enable_if_t<(... || derives_from<T, Base>()), int>;
78 
80 template<typename T, template<typename...> class... Base>
81 using disable_for_templated_t = std::enable_if_t<!(... || derives_from<T, Base>()), int>;
82 
84 template<typename T>
85 class always_true : public std::true_type
86 {};
87 
89 template<typename T>
90 class always_false : public std::false_type
91 {};
92 
94 template<typename T, bool c>
95 using const_if = std::conditional<c, const T, T>;
96 
98 template<typename T, bool c>
100 
101 } // namespace internal
102 } // namespace tvm
Definition: meta.h:91
Definition: meta.h:86
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
Definition: Clock.h:12
Definition: meta.h:34
static std::false_type check(...)
static std::true_type check(Base< T... > const volatile &)