1 // { dg-do compile { target c++11 } } 2 // { dg-options "-fconcepts" } 3 4 template <typename T> foo1(T & t)5void foo1(T& t) { 6 typename T::template C<void> tcv = t; 7 typename T::template C<auto> u = tcv; 8 T::template C<auto>::f (tcv, u); // { dg-error "incomplete" } 9 (typename T::template D<auto> (t)); // { dg-error "invalid" } 10 } 11 12 struct T1 { 13 template <typename T> struct C { 14 C(T1&); 15 static void f(T1&, C&); 16 }; 17 template <typename T> struct D { 18 D(T1&); 19 }; 20 }; 21 22 template <typename T> foo2(T & t)23void foo2(T& t) { 24 typename T::template C<void> tcv = t; 25 typename T::template C<auto> u = tcv; 26 T::template C<auto>::f (tcv, u); // { dg-error "incomplete" } 27 T::template D<auto> (t); // { dg-error "invalid" } 28 } 29 30 struct T2 { 31 template <typename T> struct C { 32 C(T2&); 33 static void f(T2&, C&); 34 }; 35 template <typename T> static void D(T2&); 36 }; 37 f(T1 & t1,T2 & t2)38void f(T1& t1, T2& t2) { 39 foo1 (t1); 40 foo2 (t2); 41 } 42