1 // Contributed by Dodji Seketeli <dodji@redhat.com> 2 // { dg-do compile } 3 4 template<class T> 5 struct C 6 { 7 void bar(); 8 }; 9 10 template<class T> 11 void bar()12C<T>::bar() 13 { 14 } 15 16 17 template<class U, 18 template<class TT0_T0> class TT0 = C, 19 template<class TT1_T0> class TT1 = TT0> 20 struct S 21 { 22 C<U> s; 23 24 void foo(TT1<U>); 25 barS26 void bar() 27 { 28 foo(s); 29 } 30 }; 31 32 template<class T, 33 template<class TT0_T0> class TT0, 34 template<class TT1_T0> class TT1> 35 void foo(TT1<T>)36S<T, TT0, TT1>::foo(TT1<T>) 37 { 38 C<T> c; 39 } 40