次のコード対C++ 14には、グラムでコンパイルすることはできません++オプション-std=c++1y
とバージョン5.4.0:デフォルト引数を持つ関数を間接参照 - C++ 11
void f(int=0) ;
int main() {
f(); // ok
(*f)(2);// ok
(*f)();// ok c++11; error with c++14: too few arguments to function
return 0;
}
デフォルト引数を持つように宣言された関数ここで何が間違っていますか? ありがとうございました。
g++ -c -std=c++11
はなぜコンパイルされますか?
明らかな答えは、新しい「g ++」バージョンを試すことです。 5行は古く、5.4は最新のマイナーリリースでもありません。このような場合には、GCC Bugzillaを検索することも賢明です。問題はすでに判明しているかもしれませんが、古いバージョンへのフィルタリングにはしばらく時間がかかることがあります。 –
コンパイラのバグのようです。 ClangはこのコードをC++ 11とC++ 14の両方として拒否します。 – StoryTeller
これは最適化パスの順序に関連していますか?つまり、引数が処理される前に直接呼び出しに最適化された関数ポインタ –