diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp2a/concepts-traits1.C')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp2a/concepts-traits1.C | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-traits1.C b/gcc/testsuite/g++.dg/cpp2a/concepts-traits1.C new file mode 100644 index 00000000000..0ea529ef4a6 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-traits1.C @@ -0,0 +1,97 @@ +// { dg-options "-std=c++2a" } + +template<typename T> + concept Nothrow_assignable = __has_nothrow_assign(T); + +template<typename T> + concept Nothrow_constructible = __has_nothrow_constructor(T); + +template<typename T> + concept Nothrow_copyable = __has_nothrow_copy(T); + +template<typename T> + concept Trivially_assignable = __has_trivial_assign(T); + +template<typename T> + concept Trivially_constructible = __has_trivial_constructor(T); + +template<typename T> + concept Trivially_copyable = __has_trivial_copy(T); + +template<typename T> + concept Trivially_destructible = __has_trivial_destructor(T); + +template<typename T> + concept Dynamically_destructible = __has_virtual_destructor(T); + +template<typename T> + concept Abstract = __is_abstract(T); + +template<typename T> + concept Polymorphic = __is_polymorphic(T); + +template<typename T> + concept Class = __is_class(T); + +template<typename T> + concept Empty = __is_empty(T); + +template<typename T> + concept Enum = __is_enum(T); + +template<typename T> + concept Final = __is_final(T); + +template<typename T> + concept Literal_type = __is_literal_type(T); + +template<typename T> + concept Pod = __is_pod(T); + +template<typename T> + concept Standard_layout = __is_standard_layout(T); + +template<typename T> + concept Trivial = __is_trivial(T); + +template<typename T> + concept Union = __is_union(T); + +template<Nothrow_assignable T> void f1() { } +template<Nothrow_copyable T> void f2() { } +template<Nothrow_constructible T> void f3() { } +template<Trivially_assignable T> void f4() { } +template<Trivially_copyable T> void f5() { } +template<Trivially_constructible T> void f6() { } +template<Trivially_destructible T> void f7() { } +template<Dynamically_destructible T> void f8() { } +template<Class T> void f9() { } +template<Empty T> void f10() { } +template<Standard_layout T> void f11() { } +template<Pod T> void f12() { } +template<Trivial T> void f13() { } +template<Polymorphic T> void f14() { } +template<Abstract T> void f15() { } +template<Final T> void f16() { } +template<Union T> void f17() { } +template<Enum T> void f18() { } + +int main() { + f1<void>(); // { dg-error "cannot call" } + f2<void>(); // { dg-error "cannot call" } + f3<void>(); // { dg-error "cannot call" } + f4<void>(); // { dg-error "cannot call" } + f5<void>(); // { dg-error "cannot call" } + f6<void>(); // { dg-error "cannot call" } + f7<void>(); // { dg-error "cannot call" } + f8<void>(); // { dg-error "cannot call" } + f9<void>(); // { dg-error "cannot call" } + f10<void>(); // { dg-error "cannot call" } + f11<void>(); // { dg-error "cannot call" } + f12<void>(); // { dg-error "cannot call" } + f13<void>(); // { dg-error "cannot call" } + f14<void>(); // { dg-error "cannot call" } + f15<void>(); // { dg-error "cannot call" } + f16<void>(); // { dg-error "cannot call" } + f17<void>(); // { dg-error "cannot call" } +} |