¿Cuáles son las reglas para elegir entre funciones de plantilla sobrecargadas?

Dado el código de abajo, ¿por qué es elfoo(T*) función seleccionada?

Si lo quito (elfoo(T*)) el código aún compila y funciona correctamente, pero G ++ v4.4.0 (y probablemente otros compiladores también) generará dosfoo() Funciones: una para char [4] y otra para 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;
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta