このプログラムが以下の出力を生成する理由がわかりません。
void blah(const char* ) {printf("const char*\n");}
void blah(const std::string&) {printf("const string ref\n");}
template<class t>
void blah(t) {printf ("unknown\n");}
int main(int, char*)
{
blah("hi");
char a[4];
blah(a);
std::string s;
blah(s);
getch();
}
出力:
const char*
unknown
const string
VS2008で。std::string を const 参照に変換しても構わないと思っていますが、char* を const char* に変換してオーバーロードを使用しないのはなぜですか?