W.F*_*.F. 6 c++ language-lawyer unspecified-behavior constexpr c++11
根据cppreference(强调我的):
核心常量表达式是任何子表达式中没有以下任何一个的表达式
(...)
- 一种表达式,其评估会导致任何形式的核心语言未定义行为(包括有符号整数溢出,除零,数组边界外的指针运算等).是否未指定检测到标准库未定义行为.
另一方面,指针上有几个表达式,结果不是未定义但未指定(参见[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?
除了关于 UB 的包罗万象的情况之外,在 [expr.const] 中禁止表达式列表的末尾是,
\n\n\n\n\n\xe2\x80\x94 关系运算符或相等运算符,其结果未指定
\n
这也出现在 cppreference 列表中,当前编号为#19。
\n 归档时间: |
|
查看次数: |
178 次 |
最近记录: |