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