私はこの非常に単純なコードを持っています:
constexpr int main()
{
return 0;
}
C++ 11標準N3485から、それが違法であることを理解しています:
関数 main は、プログラム内で使用してはなりません。main のリンケージ (3.5) は実装定義です。 main を削除済みとして定義するプログラム、または mainを inline、static、またはconstexpr であると宣言するプログラムは整形されていません。 名前 main は予約されていません。
gcc 4.7.2 を使用して実行すると。次のエラーが出力されます。
prog.cpp:1:20: error: cannot declare ‘::main’ to be inline
一方、関数本体から を削除すると、return 0
から return ステートメントが欠落しているという警告さえ出さずに同じエラーが報告されmain
ます。
これは gcc 4.7.2 のバグですか? constexpr
と報告されるのはなぜinline
ですか? 2 番目の現象は、return ステートメントを入れなくてもよいということですか、main
それとも、return ステートメントを入れなくてもデフォルトreturn 0
なのでしょうか (これは悪い習慣だとわかっています)。
ありがとうございました。