Rya*_*ing 2 c++ language-lawyer c++20
在这里剥离评论
3 [intro.defs],3.65 [defns.undef]说
常量表达式 ([expr.const]) 的求值永远不会表现出在 [intro] 到 [cpp] 中明确指定为未定义的行为
不过,通读[expr.const],我并不清楚立即函数中的每个语句都被定义为常量表达式。
如果 consteval 函数中的代码尝试显式描述为 UB 的行为,那么编译器可以表现出 UB 吗?
consteval void f() {
int x;
int y;
&x - &y; // UB allowed? or diagnostic required?
}
Run Code Online (Sandbox Code Playgroud)
如果 consteval 函数中的代码尝试显式描述为 UB 的行为,那么编译器可以表现出 UB 吗?
不。
我们这里有两条规则:
consteval必须是常量表达式(多年来,这条规则的拼写变得更加复杂,是我的错,抱歉)。因此,当您调用 时f(),它必须是一个常量表达式,这需要遵循[expr.const]/5中的所有规则。其中违反了其中的规定&x - &y。这f()不是一个核心常量表达式,这是一个强制性的诊断,因为它是一个consteval函数。该程序格式不正确。