1 // Copyright (C) 2001 Free Software Foundation
2 // Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
3 // { dg-do run }
4 
5 extern "C" void abort();
6 
7 struct A
8 {
9 	template <class T> class B {};
10 };
11 
12 template <template <class> class TT, class T> struct X
13 {
14 	TT<int> y;
15 	T z;
fX16 	int f() { return 0; }
17 };
18 
19 template <class T> struct X<T::template B, T>
20 {
21 	typename T::template B<int> y;
22 	T z;
23 	int f() { return 1; }
24 };
25 
26 template <class T> struct C
27 {
28 	X<T::template B, A> x;
29 };
30 
31 int main()
32 {
33 	C<A> c;
34 	X<A::B, A> x1;
35 	X<A::B, int> x2;
36 	if (x1.f() != 1)
37 		abort();
38 	if (x2.f() != 0)
39 		abort();
40 }
41