// { dg-do assemble } template struct S {}; template struct S {}; // { dg-error "" } default argument template struct A {}; template struct A {}; // { dg-error "" } argument involves parameter template struct C {}; template struct C; // { dg-error "" } type depends on parameter int i; template struct C; // { dg-error "" } type depends on parameter template< int X, int (*array_ptr)[X] > class B {}; int array[5]; template< int X > class B { }; // { dg-error "" } type depends on parameter