是否可以在constexpr上下文中使用指针导致未指定(未定义!)的行为?

W.F*_*.F. 6 c++ language-lawyer unspecified-behavior constexpr c++11

根据cppreference(强调我的):

核心常量表达式是任何子表达式中没有以下任何一个的表达式
(...)

  1. 一种表达式,其评估会导致任何形式的核心语言未定义行为(包括有符号整数溢出,除零,数组边界外的指针运算等).是否未指定检测到标准库未定义行为.

另一方面,指针上有几个表达式,结果不是未定义但未指定(参见[expr.rel]/3),例如:

struct A {
    int v;
};

struct B {
    int v;
};

struct C: A, B {} c;

int main() {
    constexpr bool result = &c.A::v < &c.B::v;
    (void)result;
}
Run Code Online (Sandbox Code Playgroud)

代码编译没有gcc的问题,但没有在clang中编写,其中说明无疑是真的:

不同基类的子对象地址的比较尚未明确

但是(根据我的理解),根据cppreference它不应该阻止编译器编译代码.

哪个编译器就在这里 - gcc还是clang?我是否过度解释了cppreference?

Pot*_*ter 4

除了关于 UB 的包罗万象的情况之外,在 [expr.const] 中禁止表达式列表的末尾是,

\n\n
\n

\xe2\x80\x94 关系运算符或相等运算符,其结果未指定

\n
\n\n

这也出现在 cppreference 列表中,当前编号为#19。

\n