annotate gcc/testsuite/g++.dg/cpp2a/consteval4.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 run }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 // { dg-options "-std=c++2a" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 extern "C" void abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 namespace std {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 constexpr inline bool
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 is_constant_evaluated () noexcept
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 return __builtin_is_constant_evaluated ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 int
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 main ()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 constexpr int a = 5;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 auto b = [] (int n) consteval { return n + a + std::is_constant_evaluated (); };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 int c = b (4);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 if (c != 10)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 auto d = [] () consteval { return a + std::is_constant_evaluated (); };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 int e = d ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 if (e != 6)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 constexpr int f = d ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 if (f != 6)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 static_assert (d () == 6);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 }