annotate gcc/testsuite/g++.dg/cpp2a/concepts2.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 // { dg-do compile { target c++2a } }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 template<typename T>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 concept True = true;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 template<typename T>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 concept False = false;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 template<typename T>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 concept Int = __is_same_as(T, int);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 static_assert(True<int>);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 static_assert(!False<int>);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 static_assert(False<int>); // { dg-error "static assertion failed" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 constexpr bool will_be_true() {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 if (True<int>)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 return true;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 return false;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 constexpr bool will_be_false() {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 if (!False<int>)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 return true;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 return false;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 static_assert(will_be_true());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 static_assert(will_be_false());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 template<typename T>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 constexpr bool is_int() {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 if (Int<T>)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 return true;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 return false;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 static_assert(is_int<int>());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 static_assert(is_int<void>()); // { dg-error "static assertion failed" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 template<typename T>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 constexpr bool f1() {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 if (Int<int>) // Note: always true.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 return true;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 return false;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 static_assert(f1<int>());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 static_assert(f1<void>());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 template<typename T>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 constexpr bool f2() {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 if constexpr (Int<int>) // Note: always true.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 return true;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 return false;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 static_assert(f2<int>());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 static_assert(f2<void>());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 template<typename T>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 concept C = true;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 int driver() {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 bool c_int = (C<int>);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 if((C<int>))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 ;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 return c_int;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69