1. ホーム
  2. c++

[解決済み] g++ 6.0では、なぜこの無効なコードが正常にコンパイルされるのでしょうか?重複

2023-07-06 10:41:03

質問

この奇妙なプログラムを考えてみましょう。

int main()
{
    int(*){} Is it C++14 or any other language?
}

(ライブデモを見る こちら & こちら .)

というコメントがあっても // が抜けています。 を使っても、エラーや警告を出さずにうまくコンパイルされます。 -pedantic-errors オプションを使用しても、エラーや警告を出さずにコードをコンパイルできます。これは、私にはコンパイラのバグのように思えます。それは本当にコンパイラのバグなのでしょうか?

どのように解決するのですか?

これは、私がテストできるすべてのバージョンにおいて、g++ のバグ/機能/問題のように見えます。 実行中

int main()
{
    int(*){} Is it C++14 or any other language?
}

について godbolt.org において、コンパイルフラグのないすべてのバージョンの g++ で、次のようなアセンブリの出力が得られます。

main:
    pushq   %rbp
    movq    %rsp, %rbp
    movl    $0, %eax
    leave
    ret

でしか診断が出ません。 godbolt.org であり、それは

!!warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x

Clang、ICC、MSVSのいずれもコンパイルに失敗しています。

EDITです。

コメントより zwol は、この件に関して gcc にバグを提出しました。 そのバグレポートは ここにあります。 .