1 // { dg-do compile { target c++17 } }
2 // { dg-options "-fconcepts" }
3 
4 template<typename T>
Nothrow_assignable()5   concept bool Nothrow_assignable() { return __has_nothrow_assign(T); }
6 
7 template<typename T>
Nothrow_constructible()8   concept bool Nothrow_constructible() { return __has_nothrow_constructor(T); }
9 
10 template<typename T>
Nothrow_copyable()11   concept bool Nothrow_copyable() { return __has_nothrow_copy(T); }
12 
13 template<typename T>
Trivially_assignable()14   concept bool Trivially_assignable() { return __has_trivial_assign(T); }
15 
16 template<typename T>
Trivially_constructible()17   concept bool Trivially_constructible() { return __has_trivial_constructor(T); }
18 
19 template<typename T>
Trivially_copyable()20   concept bool Trivially_copyable() { return __has_trivial_copy(T); }
21 
22 template<typename T>
Trivially_destructible()23   concept bool Trivially_destructible() { return __has_trivial_destructor(T); }
24 
25 template<typename T>
Dynamically_destructible()26   concept bool Dynamically_destructible() { return __has_virtual_destructor(T); }
27 
28 template<typename T>
Abstract()29   concept bool Abstract() { return __is_abstract(T); }
30 
31 template<typename T>
Polymorphic()32   concept bool Polymorphic() { return __is_polymorphic(T); }
33 
34 template<typename T>
Class()35   concept bool Class() { return __is_class(T); }
36 
37 template<typename T>
Empty()38   concept bool Empty() { return __is_empty(T); }
39 
40 template<typename T>
Enum()41   concept bool Enum() { return __is_enum(T); }
42 
43 template<typename T>
Final()44   concept bool Final() { return __is_final(T); }
45 
46 template<typename T>
Literal_type()47   concept bool Literal_type() { return __is_literal_type(T); }
48 
49 template<typename T>
Pod()50   concept bool Pod() { return __is_pod(T); }
51 
52 template<typename T>
Standard_layout()53   concept bool Standard_layout() { return __is_standard_layout(T); }
54 
55 template<typename T>
Trivial()56   concept bool Trivial() { return __is_trivial(T); }
57 
58 template<typename T>
Union()59   concept bool Union() { return __is_union(T); }
60 
61 template<Nothrow_assignable T> void f1();
62 template<Nothrow_copyable T> void f2();
63 template<Nothrow_constructible T> void f3();
64 template<Trivially_assignable T> void f4();
65 template<Trivially_copyable T> void f5();
66 template<Trivially_constructible T> void f6();
67 template<Trivially_destructible T> void f7();
68 template<Dynamically_destructible T> void f8();
69 template<Class T> void f9();
70 template<Empty T> void f10();
71 template<Standard_layout T> void f11();
72 template<Pod T> void f12();
73 template<Trivial T> void f13();
74 template<Polymorphic T> void f14();
75 template<Abstract T> void f15();
76 template<Final T> void f16();
77 template<Union T> void f17();
78 template<Enum T> void f18();
79 
80 
main()81 int main() {
82   f1<void>(); // { dg-error "cannot call" }
83   f2<void>(); // { dg-error "cannot call" }
84   f3<void>(); // { dg-error "cannot call" }
85   f4<void>(); // { dg-error "cannot call" }
86   f5<void>(); // { dg-error "cannot call" }
87   f6<void>(); // { dg-error "cannot call" }
88   f7<void>(); // { dg-error "cannot call" }
89   f8<void>(); // { dg-error "cannot call" }
90   f9<void>(); // { dg-error "cannot call" }
91   f10<void>(); // { dg-error "cannot call" }
92   f11<void>(); // { dg-error "cannot call" }
93   f12<void>(); // { dg-error "cannot call" }
94   f13<void>(); // { dg-error "cannot call" }
95   f14<void>(); // { dg-error "cannot call" }
96   f15<void>(); // { dg-error "cannot call" }
97   f16<void>(); // { dg-error "cannot call" }
98   f17<void>(); // { dg-error "cannot call" }
99 }
100