Специализация шаблона и простые старые функции

У меня есть простой вопрос, проверьте этот код, пожалуйста:

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 работает, конечно, но что мне не понятно, так это то, почему вывод «2» вместо «3».

Насколько я помню, не шаблонная функция всегда предпочтительнее шаблонной, так почему она называется специализированной foo?

Спасибо

3

Решение

Вы специально используете специализированную версию. Если бы вы сделали это:

template <typename T>
void foo(T a) {
std::cout << "1" << std::endl;
}

void foo(float a) {
std::cout << "2" << std::endl;
}
int main(void) {
foo(1.0f);
}

чем он выбрал бы не шаблонную версию.

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]