Template argument deduction

Which call compiles successfully?

template<typename T>
void f(T, T) {}

int main() {
    f(1, 2);      // (A)
    f(1, 2.0);    // (B)
    f<int>(1, 2.0); // (C)
}