根据cppreference(重点是我的):
另一方面,指针上有几个表达式,其结果不是不确定的,而是未指定(cf. [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;
}
该代码编译时没有gcc的问题,但是没有在clang中编译,这表明毫无疑问是正确的:
但是(据我所知)根据cppreference,它不应阻止编译器编译代码。
哪一个编译器在这里-gcc或clang?我是否过度解释了cppreference?
最佳答案
除了关于UB的所有情况之外,[expr.const]中的禁止表达式列表的末尾还有,
这也会出现在cppreference列表中,当前编号为#19。