次のコードは正常にコンパイルされます。
template<typename T>
void f(const T &item) { return; }
int main()
{
f("const string literal");
}
ideone でコンパイル成功: http://ideone.com/dR6iZ
しかし、戻り値の型について言及すると、コンパイルされません。
template<typename T>
T f(const T &item) { return item; }
int main()
{
f("const string literal");
}
今ではエラーが発生します:
prog.cpp:6: エラー: 'f(const char [21])' の呼び出しに一致する関数がありません</p>
ideone のコード: http://ideone.com/b9aSb
戻り値の型const T
にしてもコンパイルされません。
私の質問は:
- なぜコンパイルされないのですか?
- 戻り値の型は、エラーと関数テンプレートのインスタンス化にどのような関係がありますか?