#include <iostream>
using namespace std;

template<typename T>
struct C{
using type=long;
};
template<>
struct C<int>{
using type=float;
};
template<typename T>
using B=typename C<T>::type;

template<typename T>
auto f(B<T>& x){cout <<"A"<<endl;}

int main() {
B<int> x;
f(x);
float y;
f(y);
return 0;
}
なぜマッチしてると思うのにマッチしてないエラーになるんですか?