【发布时间】:2019-09-12 15:15:44
【问题描述】:
此代码在 GCC 8 中编译,但在 GCC 7 和 clang 中均不编译。
constexpr int a = 1;
constexpr int b = --const_cast<int&>(a);
这显然是 UB。
我的问题:关于评估包含 UB 的 constexpr,标准语言怎么说 - 这段代码是否应该编译?
【问题讨论】:
-
为什么这是 UB 对我来说不是很明显?你能引用适用的标准部分吗?
-
@SergeyA 这就是问题所在。 OP 正在询问标准的哪一部分说这是 UB。
-
@FrançoisAndrieux 这不是我的阅读方式。 OP 说:“这显然是 UB。” 对我来说,这不是问题,而是 OP 的声明。
-
@SergeyA 您不能修改 const 对象,但这正是
--const_cast<int&>(a)所做的。 -
据我所知
constexpr暗示const,因此您正在修改const引用,这是未定义的行为。见stackoverflow.com/questions/25209838/…
标签: c++ language-lawyer undefined-behavior constexpr