aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/cpp2a/concepts-traits1.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp2a/concepts-traits1.C')
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/concepts-traits1.C97
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" }
+}