Каковы правила выбора из перегруженных функций шаблона?

Учитывая код ниже, почемуfoo(T*) функция выбрана?

Если я удалю его (foo(T*)) код все еще компилируется и работает правильно, но G ++ v4.4.0 (и, возможно, другие компиляторы) сгенерирует дваfoo() функции: одна для символа [4] и одна для символа [7].

#include <iostream>
using namespace std;

template< typename T >
void foo( const T& )
{
    cout << "foo(const T&)" << endl;
}

template< typename T >
void foo( T* )
{
    cout << "foo(T*)" << endl;
}

int main()
{
    foo( "bar" );
    foo( "foobar" );
    return 0;
}

Ответы на вопрос(4)

Ваш ответ на вопрос