// { dg-do assemble } struct S1 { template void f(T t1, T t2); // { dg-message "candidate" } }; template <> void S1::f(int i1, int i2); template struct S2 { template void f(T t1, T t2); // { dg-message "candidate" } }; template <> template <> void S2::f(int i1, int i2); void h() { S1 s1; s1.f(3, 'c'); // { dg-error "" } no matching function S2 s2; s2.f(3, 'c'); // { dg-error "" } no matching function }