GCC가 잘못된 형식의 constexpr lambda 호출을보고하지 않습니다.


9

다음은 정의되지 않은 동작에 대한 두 가지 테스트 사례로, 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() {}

GCC 트렁크로 컴파일하면 test4a에서 정의되지 않은 동작이 표시되므로 올바르게 거부됩니다 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.