다음은 정의되지 않은 동작에 대한 두 가지 테스트 사례로, 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 트렁크로 컴파일하면 test4
a에서 정의되지 않은 동작이 표시되므로 올바르게 거부됩니다 constexpr
. 반면 test3
에 허용됩니다.
GCC가 수락 할 권리가 test3
있습니까?
4
@ formerlyknownas_463035818 표준에서는 constexpr의 모든 UB를 진단해야합니다.
—
NathanOliver
@NathanOliver 감사합니다. 그게 내가 배우는 방법, 실수를한다;)
—
idclev 463035818
네. GCC 버그처럼 보입니다
—
NathanOliver
보고하겠습니다.
—
wimalopaan