// Test that 'extern template' suppresses instantiations. // { dg-do link } // { dg-options "" } template void f (T) { } extern template void f (int); template struct A { void f (); }; template void A::f () { } extern template struct A; // { dg-error "void f\\(int\\)" "suppressing f" { target *-*-* } "0" } void test_f_int () { f(42); } // { dg-error "A::f\\(\\)" "suppressing A" { target *-*-* } "0" } void test_A_int_f () { A a; a.f (); } // { dg-bogus "void f\\(double\\)" "f" { target *-*-* } "0" } void test_f_double () { f (2.0); } // { dg-bogus "A::f\\(\\)" "A" { target *-*-* } "0" } void test_A_double_f () { A b; b.f (); } int main () { test_f_int (); test_A_int_f (); test_f_double (); test_A_double_f (); }