Jakie są zasady wybierania z przeciążonych funkcji szablonu?

Biorąc pod uwagę poniższy kod, dlaczego jestfoo(T*) wybrana funkcja?

Jeśli go usunę (foo(T*)) kod nadal się kompiluje i działa poprawnie, ale G ++ v4.4.0 (i prawdopodobnie również inne kompilatory) wygeneruje dwafoo() funkcje: jedna dla char [4] i jedna dla char [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;
}

questionAnswers(4)

yourAnswerToTheQuestion