相关疑难解决方法(0)

编译器是否允许在常量表达式中考虑未定义的行为?

我们知道导致未定义行为的操作不是核心常量表达式(C++标准草案第5.19节第2段)

在测试中我已经完成了两个clang并将constexpr中的gcc未定义行为视为错误,但是在左移右移的情况下它们是不一致的.例如,根据Shift操作符13段,所有这些被视为未定义行为的情况:5.8

constexpr int x1 =  1 << 33 ; //Assuming 32-bit int
constexpr int x2 =  1 << -1 ;
constexpr int x3 =  -1 << 1 ;
constexpr int x4 =  1 >> 33 ; //Assuming 32-bit int
constexpr int x5 =  1 >> -1 ;
Run Code Online (Sandbox Code Playgroud)

clang会产生错误(看到它):

error: constexpr variable 'x1' must be initialized by a constant …
Run Code Online (Sandbox Code Playgroud)

c++ gcc undefined-behavior language-lawyer c++11

5
推荐指数
1
解决办法
661
查看次数

标签 统计

c++ ×1

c++11 ×1

gcc ×1

language-lawyer ×1

undefined-behavior ×1