考虑以下代码:
#includestatic int x = 0; const uintptr_t arithmetic() { static constexpr uintptr_t result = ((uintptr_t)&x) + 1u; return result; } const uintptr_t bitwise() { static constexpr uintptr_t result = ((uintptr_t)&x) | 1u; return result; }
GCC(所有版本4-9)都arithmetic()
可以正常编译,但可以拒绝bitwise()
:
为什么?请注意,在其他constexpr用例中,按位-或工作正常,但不是这种情况。
演示:https://godbolt.org/z/x5jbuU