我们知道导致未定义行为的操作不是核心常量表达式(C++标准草案第5.19节第2段)
在测试中我已经完成了两个clang并将constexpr中的gcc未定义行为视为错误,但是在左移右移的情况下它们是不一致的.例如,根据Shift操作符第1至3段,所有这些被视为未定义行为的情况: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)