// { dg-do assemble } template <class T> struct C { template <class U> void f(U); // OK template <class V = int> struct I {}; // OK template <class W = int> void h(W); // { dg-error "" } default argument template <class Y> void k(Y); }; template <class T> template <class U = double> void C<T>::f(U) {} // { dg-error "" } default argument template <class X = void*> void g(X); // { dg-error "" } default argument template <class T = double> template <class Y> void C<T>::k(Y) {} // { dg-error "" } default argument