С учетом этого кода:
struct A {
A(int e) { throw e; }
};
struct B {
A a{42}; // Same with = 42; syntax
};
int main() {
try {
B b;
} catch (int const e) {
return e;
}
}
При компиляции с GCC (версии 4.7.4, 4.8.5, 4.9.3, 5.4.0, 6.3.0):
$ g++ -std=c++11 test.cpp -o test; ./test ; echo $?
terminate called after throwing an instance of 'int'
Aborted
134
Но при компиляции с Clang (версия 4.0.0):
$ clang++ -std=c++11 test.cpp -o test; ./test ; echo $?
42
Какое поведение верно?