検討:
void f() {
return 5;
}
上記はエラーになります。しかし、なぜこれではないのですか?:
template <typename = void> void f() {
return 0;
}
gcc-4.5.1 でコンパイルしています。非テンプレート関数と同じ不正な return ステートメントを実行してもエラーが発生しないように、テンプレートを使用すると違いが生じるのはなぜですか? 私が得る唯一の後退は、取得せずに関数(つまりf()
)を呼び出すことができないことです:
error: return-statement with a value, in function returning 'void'
それでも、void 関数テンプレートの return ステートメントを定義できる理由は何でしょうか?
ここに私が持っているコードがあります:
template <typename = void> void f() {
return 0;
}
// pass
int main() {
}
上記のコードは、void を返す関数内のおそらく不正な return ステートメントにもかかわらず合格します。