显式指定的未定义行为能否在consteval函数中无诊断发生?
关于consteval函数中未定义行为的编译处理
根据C++标准中的定义:
常量表达式的求值永远不会表现出[intro]至[cpp]中显式指定的未定义行为
consteval作为立即函数,其调用必须在常量表达式语境下完成求值,函数体的执行过程属于常量表达式求值的一部分。
回到你给出的示例代码:
consteval void f() { int x; int y; &x - &y; // 是否允许UB?还是必须给出诊断? }
这里&x - &y是两个无关局部变量的指针相减,属于标准中显式规定的未定义行为。由于consteval函数的求值必须满足常量表达式的要求,而常量表达式不允许出现这类显式未定义行为,因此编译器必须对此给出诊断(报错),不能放任未定义行为存在。
内容的提问来源于stack exchange,提问作者Ryan Haining
相关产品推荐
相关产品推荐

