Welche Regeln gelten für die Auswahl aus überladenen Vorlagenfunktionen?

In Anbetracht des folgenden Codes, warum ist dasfoo(T*) Funktion ausgewählt?

Wenn ich es entferne (dasfoo(T*)) Der Code wird immer noch kompiliert und funktioniert korrekt, aber G ++ v4.4.0 (und wahrscheinlich auch andere Compiler) werden zwei generierenfoo() Funktionen: eine für char [4] und eine für 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;
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage