// PR c++/20172 // Origin: Volker Reichelt template struct A { template int foo(); // { dg-error "double" } template class> int bar(); // { dg-error "double" } template struct X; // { dg-error "double" } }; A a1; A a2; // { dg-message "instantiated" } template struct B { template int foo(); // { dg-error "double" } template class> int bar(); // { dg-error "double" } template struct X; // { dg-error "double" } }; template int foo(); // { dg-error "void" } template class> int bar(); // { dg-error "void" } template struct X; // { dg-error "void" } template struct C { template int foo(); // { dg-error "double" } }; template int baz(T) { C c; } // { dg-message "instantiated" } void foobar() { baz(1.2); // { dg-message "instantiated" } }