// Build don't link: template <int I> struct A { }; template <int I, int J> struct B { operator A<3> (); operator B<3, 7> (); }; template <int I, int J> void f(B<I, J>); template <int I> void f(A<I>) { } 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>()); }