| // Copyright (C) 2001 Free Software Foundation |
| // Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> |
| // { dg-do run } |
| |
| extern "C" void abort(); |
| |
| struct A |
| { |
| template <class T> class B {}; |
| }; |
| |
| template <template <class> class TT, class T> struct X |
| { |
| TT<int> y; |
| T z; |
| int f() { return 0; } |
| }; |
| |
| template <class T> struct X<T::template B, T> |
| { |
| typename T::template B<int> y; |
| T z; |
| int f() { return 1; } |
| }; |
| |
| template <class T> struct C |
| { |
| X<T::template B, A> x; |
| }; |
| |
| int main() |
| { |
| C<A> c; |
| X<A::B, A> x1; |
| X<A::B, int> x2; |
| if (x1.f() != 1) |
| abort(); |
| if (x2.f() != 0) |
| abort(); |
| } |