Changeset View
Changeset View
Standalone View
Standalone View
clang/test/SemaCXX/type-traits.cpp
Show First 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | |||||
static_assert(__is_same(decay_t<const volatile S &&>, S), ""); | static_assert(__is_same(decay_t<const volatile S &&>, S), ""); | ||||
static_assert(__is_same(decay_t<int S::*const volatile>, int S::*), ""); | static_assert(__is_same(decay_t<int S::*const volatile>, int S::*), ""); | ||||
static_assert(__is_same(decay_t<int (S::*const volatile)()>, int(S::*)()), ""); | static_assert(__is_same(decay_t<int (S::*const volatile)()>, int(S::*)()), ""); | ||||
static_assert(__is_same(decay_t<int S::*const volatile &>, int S::*), ""); | static_assert(__is_same(decay_t<int S::*const volatile &>, int S::*), ""); | ||||
static_assert(__is_same(decay_t<int (S::*const volatile &)()>, int(S::*)()), ""); | static_assert(__is_same(decay_t<int (S::*const volatile &)()>, int(S::*)()), ""); | ||||
static_assert(__is_same(decay_t<int S::*const volatile &&>, int S::*), ""); | static_assert(__is_same(decay_t<int S::*const volatile &&>, int S::*), ""); | ||||
} | } | ||||
void check_decay_template() { | |||||
static_assert(__is_same(__decay<void>, void), ""); | |||||
static_assert(__is_same(__decay<const volatile void>, void), ""); | |||||
static_assert(__is_same(__decay<int>, int), ""); | |||||
static_assert(__is_same(__decay<const int>, int), ""); | |||||
static_assert(__is_same(__decay<volatile int>, int), ""); | |||||
static_assert(__is_same(__decay<const volatile int>, int), ""); | |||||
static_assert(__is_same(__decay<int *>, int *), ""); | |||||
static_assert(__is_same(__decay<int *const volatile>, int *), ""); | |||||
static_assert(__is_same(__decay<int *const volatile __restrict>, int *), ""); | |||||
static_assert(__is_same(__decay<int const *const volatile>, int const *), ""); | |||||
static_assert(__is_same(__decay<int const *const volatile _Nonnull>, int const *), ""); | |||||
static_assert(__is_same(__decay<int &>, int), ""); | |||||
static_assert(__is_same(__decay<int const volatile &>, int), ""); | |||||
static_assert(__is_same(__decay<int &&>, int), ""); | |||||
static_assert(__is_same(__decay<int const volatile &&>, int), ""); | |||||
static_assert(__is_same(__decay<int()>, int (*)()), ""); | |||||
static_assert(__is_same(__decay<int (*)()>, int (*)()), ""); | |||||
static_assert(__is_same(__decay<int (*const)()>, int (*)()), ""); | |||||
static_assert(__is_same(__decay<int (*volatile)()>, int (*)()), ""); | |||||
static_assert(__is_same(__decay<int (*const volatile)()>, int (*)()), ""); | |||||
static_assert(__is_same(__decay<int (&)()>, int (*)()), ""); | |||||
static_assert(__is_same(__decay<IntAr>, int *), ""); | |||||
static_assert(__is_same(__decay<IntArNB>, int *), ""); | |||||
static_assert(__is_same(__decay<S>, S), ""); | |||||
static_assert(__is_same(__decay<S &>, S), ""); | |||||
static_assert(__is_same(__decay<S &&>, S), ""); | |||||
static_assert(__is_same(__decay<const S>, S), ""); | |||||
static_assert(__is_same(__decay<const S &>, S), ""); | |||||
static_assert(__is_same(__decay<const S &&>, S), ""); | |||||
static_assert(__is_same(__decay<volatile S>, S), ""); | |||||
static_assert(__is_same(__decay<volatile S &>, S), ""); | |||||
static_assert(__is_same(__decay<volatile S &&>, S), ""); | |||||
static_assert(__is_same(__decay<const volatile S>, S), ""); | |||||
static_assert(__is_same(__decay<const volatile S &>, S), ""); | |||||
static_assert(__is_same(__decay<const volatile S &&>, S), ""); | |||||
static_assert(__is_same(__decay<int S::*const volatile>, int S::*), ""); | |||||
static_assert(__is_same(__decay<int (S::*const volatile)()>, int(S::*)()), ""); | |||||
static_assert(__is_same(__decay<int S::*const volatile &>, int S::*), ""); | |||||
static_assert(__is_same(__decay<int (S::*const volatile &)()>, int(S::*)()), ""); | |||||
static_assert(__is_same(__decay<int S::*const volatile &&>, int S::*), ""); | |||||
} | |||||
template <class T> struct CheckAbominableFunction {}; | template <class T> struct CheckAbominableFunction {}; | ||||
template <class M> | template <class M> | ||||
struct CheckAbominableFunction<M S::*> { | struct CheckAbominableFunction<M S::*> { | ||||
static void checks() { | static void checks() { | ||||
static_assert(__is_same(add_lvalue_reference_t<M>, M), ""); | static_assert(__is_same(add_lvalue_reference_t<M>, M), ""); | ||||
static_assert(__is_same(add_pointer_t<M>, M), ""); | static_assert(__is_same(add_pointer_t<M>, M), ""); | ||||
static_assert(__is_same(add_rvalue_reference_t<M>, M), ""); | static_assert(__is_same(add_rvalue_reference_t<M>, M), ""); | ||||
static_assert(__is_same(decay_t<M>, M), ""); | static_assert(__is_same(decay_t<M>, M), ""); | ||||
▲ Show 20 Lines • Show All 92 Lines • Show Last 20 Lines |