26 #include <type_traits>
32 template <
class Default,
class AlwaysVoid,
template <
class...>
class Op,
class... Args>
38 template <
class Default,
template <
class...>
class Op,
class... Args>
39 struct detector<Default, std::void_t<Op<Args...>>, Op, Args...> {
52 template <
template <
class...>
class Op,
class... Args>
55 template <
template <
class...>
class Op,
class... Args>
58 template <
class Default,
template <
class...>
class Op,
class... Args>
61 template <
template <
class...>
class Op,
class... Args>
64 template <
class Default,
template <
class...>
class Op,
class... Args>
67 template <
class Expected,
template <
class...>
class Op,
class... Args>
70 template <
class Expected,
template <
class...>
class Op,
class... Args>
73 template <
class To,
template <
class...>
class Op,
class... Args>
76 template <
class To,
template <
class...>
class Op,
class... Args>
Definition: champsim.h:24
typename detail::detector< nonesuch, void, Op, Args... >::type detected_t
Definition: detect.h:56
typename detail::detector< nonesuch, void, Op, Args... >::value_t is_detected
Definition: detect.h:53
std::is_convertible< detected_t< Op, Args... >, To > is_detected_convertible
Definition: detect.h:74
typename detected_or< Default, Op, Args... >::type detected_or_t
Definition: detect.h:65
std::is_same< Expected, detected_t< Op, Args... > > is_detected_exact
Definition: detect.h:68
constexpr bool is_detected_exact_v
Definition: detect.h:71
constexpr bool is_detected_convertible_v
Definition: detect.h:77
constexpr bool is_detected_v
Definition: detect.h:62
std::true_type value_t
Definition: detect.h:40
Op< Args... > type
Definition: detect.h:41
std::false_type value_t
Definition: detect.h:34
Default type
Definition: detect.h:35
nonesuch(nonesuch const &)=delete
void operator=(nonesuch const &)=delete