Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/g++.dg/cpp2a/concepts-pr67070.C @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
1 // { dg-do compile { target c++2a } } | |
2 | |
3 template <class T> | |
4 concept C1 = | |
5 requires { typename T::type; } && T::type::value; | |
6 | |
7 template <class T> | |
8 concept C2 = | |
9 requires { | |
10 typename T::Type; | |
11 requires T::Type::value; | |
12 }; | |
13 | |
14 template <class T> | |
15 requires (!C1<T>) | |
16 void f1() { } | |
17 | |
18 template <class T> | |
19 requires (!C2<T>) | |
20 void f2() { } | |
21 | |
22 struct S { }; | |
23 | |
24 void test() | |
25 { | |
26 f1<S>(); | |
27 f2<S>(); | |
28 } | |
29 | |
30 // ------------------ | |
31 | |
32 | |
33 template<typename T> | |
34 concept C = requires (T t) { t.f(); }; | |
35 | |
36 template<typename A, typename B> | |
37 requires (!(C<A> && C<B>)) | |
38 void g1() { } | |
39 | |
40 template<typename A, typename B> | |
41 requires (!C<A> || !C<B>) | |
42 void g2() { } | |
43 | |
44 struct X { | |
45 void f(); | |
46 }; | |
47 | |
48 void test2() { | |
49 g1<X, X>(); // { dg-error "" } | |
50 g2<X, X>(); // { dg-error "" } | |
51 } |