// { dg-do run } extern "C" void abort (); template struct I { }; template struct A { int r; template void operator()(T1, T2) { r = 0; } template void operator()(I, I) { r = 1; } }; int main() { A x; I<0> a; I<1> b; x(a,b); if (x.r != 1) abort(); x(float(), double()); if (x.r != 0) abort(); return 0; }