// { dg-do assemble } template struct A { }; template struct B { operator A<3> (); operator B<3, 7> (); }; template void f(B); template void f(A) { } int main() { // Deduction fails with the first `f'. Since `3' is explicitly // specified, we don't try any deduction with the second `f'. So, // we call the second `f'. f<3>(B<2, 7>()); }