GCC không báo cáo cuộc gọi lambda constexpr không định hình


9

Dưới đây là hai trường hợp thử nghiệm cho Hành vi không xác định, được biểu thị là IIFE (Được gọi ngay lập tức Lambda-A े ion):

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

Khi được biên dịch với thân GCC, test4bị từ chối chính xác vì nó thể hiện Hành vi không xác định trong mộtconstexpr . Mặt khác test3được chấp nhận.

GCC có quyền chấp nhận test3không?


4
@ trước đây là Unknown_463035818 Tiêu chuẩn yêu cầu TẤT CẢ UB trong một constexpr được chẩn đoán.
NathanOliver

@NathanOliver cảm ơn. đó là cách tôi học, tôi mắc lỗi;)
idclev 463035818

Vâng. Trông giống như một lỗi GCC
NathanOliver

Tôi sẽ báo cáo nó.
wimalopaan

Câu trả lời:


7

GCC có quyền chấp nhận test3 không?

Không, đây là một lỗi GCC. Tôi chỉ báo cáo đó là lỗi # 93389 .


Cảm ơn bạn đã tinh giản để đặt câu hỏi và câu trả lời!
wimalopaan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.