GCCが不正なconstexprラムダ呼び出しを報告できない


9

以下は、IIFE(Immediately Called Lambda-Axpression)として表される未定義の動作の2つのテストケースです。

constexpr auto test3 = []{
    int* p{};
    {   
        int x{};
        p = &x;
    }
    return *p; // Undefined Behaviour
}(); // IIFE

constexpr auto test4 = []{
    int x = std::numeric_limits<int>::min();
    int y = -x;  // Undefined Behaviour
    return y;
}();

int main() {}

GCCトランクでコンパイルすると、test4で未定義の動作を示すため、正しく拒否されconstexprます。一方、test3受け入れられます。

GCCは受け入れる権利がありますtest3か?


4
@ formerlyknownas_463035818標準では、constexpr内のすべてのUBを診断する必要があります。
NathanOliver

@NathanOliverああありがとう。それが私が学ぶ方法です、私は間違いをします;)
idclev 463035818

うん。GCCバグのように見える
NathanOliver

報告します。
wimalopaan

回答:


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.