G CC не может сообщить о неправильно сформированном лямбда-вызове constexpr - PullRequest
9 голосов
/ 22 января 2020

Ниже приведены два тестовых примера для неопределенного поведения, выраженного в виде IIFE (немедленного вызова лямбда-сжатия):

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() {}

При компиляции с магистралью G CC, test4 корректно отклоняется, так как демонстрирует неопределенное поведение в constexpr. С другой стороны, принимается test3.

Правильно ли G CC принять test3?

1 Ответ

7 голосов
/ 22 января 2020

Правильно ли G CC принять test3?

Нет, это ошибка G CC. Я только что сообщил об этом как ошибка # 93389 .

...