// { dg-do assemble } | |
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>()); | |
} |