annotate gcc/testsuite/g++.dg/cpp2a/concepts-pr67654.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 // PR c++/67427
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 // { dg-do compile { target c++2a } }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 // { dg-additional-options "-fconcepts-ts" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 template <bool... Values> struct and_c_impl {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 static constexpr bool value = true;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 template <bool ValueFirst, bool... ValuesRest>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 struct and_c_impl<ValueFirst, ValuesRest...> {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 static constexpr bool value = ValueFirst && and_c_impl<ValuesRest...>::value;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 template <bool... Values> constexpr bool and_c() {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 return and_c_impl<Values...>::value;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 template<class T> concept bool C() {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 return true;
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 template<class... Tx>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 struct A {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 A() requires and_c<C<Tx>()...>() = default;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 int main() {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 A<int, double> a;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 return 0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 }