#include <iostream>
using namespace std;
struct A
{
A() { cout << "A" << endl; }
~A() { cout << "~A" << endl; }
};
A Ok() { return {}; }
A NotOk() { throw "NotOk"; }
struct B
{
A a1;
A a2;
};
void f(B) {}
int main()
{
try
{
f({ Ok(), NotOk() });
}
catch (...)
{}
}
VC++
和 Clang
输出:
A
~A
当 gcc
输出:
A
似乎是GCC的一个严重bug。
参考:GCC bug 66139和Andrzej Krzemieński的"A serious bug in GCC"。
我只是想知道:
C++标准是否保证统一初始化是异常安全的?
A a=Ok(); f({ a, NotOk() });
。我在函数调用参数的构造期间记录了复制构造函数的调用,以及在本地作用域中的a
实例的析构函数的调用,但是没有为复制构造的实例调用析构函数。 - Sam Varshavchik