comparison gcc/testsuite/g++.dg/cpp2a/concepts-pr71368.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 // PR c++/71368
2 // { dg-do compile { target c++2a } }
3
4 template <class T, class U> concept Same = __is_same_as(T,U);
5
6 struct inner;
7
8 template<typename X> concept CompoundReq = requires {
9 // fine with concrete type in trailing type, i.e. inner& instead of X&
10 { X::inner_member() } -> Same<X&>;
11 };
12
13 template<typename X> concept Concept = requires {
14 { X::outer_member() } -> CompoundReq;
15 };
16
17 struct inner { static inner& inner_member(); };
18 struct outer { static inner outer_member(); };
19
20 int main()
21 {
22 // fine
23 static_assert( CompoundReq<inner> );
24 static_assert( CompoundReq<decltype( outer::outer_member() )> );
25
26 // ICE
27 static_assert( Concept<outer> );
28 }