文字列リテラルって、本来的な定義的では const char* const じゃないの?
つまり、 void foo(const char*) に文字列リテラルを渡せるという仕様がおかしいんだよ!