【发布时间】:2020-07-05 07:32:02
【问题描述】:
以下代码
#include <iostream>
struct A {
A() {
std::cout << std::endl;
}
};
struct B {
static inline A a;
};
int main() {
}
使用 gcc 编译成功,但使用 clang 编译后因分段错误而崩溃。是代码不标准还是clang错误?
【问题讨论】:
-
MVCC的结果与GCC的结果相同。clang处理static inline A a;的方式有些奇怪?另外,我认为copy-elision 将在其中发挥作用(虽然我可能错了......) -
@molbdnilo,我猜我们有stronger guarantee:标题
<iostream>的行为就好像它(直接或间接)定义了一个具有静态存储持续时间的std::ios_base::Init实例:这使得使用有序初始化访问静态对象的构造函数和析构函数中的标准 I/O 流是安全的(只要在定义这些对象之前将#include <iostream>包含在翻译单元中)。 如果我们将@987654332 @ 不是inline,它有效。 -
内联对象是什么意思?
-
@d4rk4ng31 c++17 功能
-
哪个版本的 Clang 会崩溃?它适用于
Apple clang version 11.0.0。
标签: c++ clang language-lawyer initialization-order