#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.
Для справки см. ошибка GCC 66139 и "Серьезная ошибка в GCC" Анджей Кржемейски.
Мне просто интересно:
Означает ли стандарт С++, что единообразная инициализация является безопасной?