簡単な質問があります。このコードを確認してください。
template < typename A >
void foo( A a )
{ cout<<"1\n"; };
template< >
void foo<float>( float a )
{ cout<<"2\n"; }
void foo( float a )
{ cout<<"3\n"; }
int main()
{
foo<float>( 1.0f );
}
もちろん、g++ 4.7.2 でコンパイルすると動作しますが、出力が「3」ではなく「2」である理由がわかりません。
私が覚えている限り、テンプレート以外の関数は常にテンプレート関数よりも優先されるのに、特殊化された foo と呼ばれるのはなぜですか?
ありがとう