1// Copyright (C) 2001 Free Software Foundation 2// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> 3// { dg-do run } 4 5extern "C" void abort(); 6 7struct A 8{ 9 template <class T> class B {}; 10}; 11 12template <template <class> class TT, class T> struct X 13{ 14 TT<int> y; 15 T z; 16 int f() { return 0; } 17}; 18 19template <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 26template <class T> struct C 27{ 28 X<T::template B, A> x; 29}; 30 31int 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