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()12 C<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>)36 S<T, TT0, TT1>::foo(TT1<T>)
37 {
38   C<T> c;
39 }
40