имеется следующий код:
#include <iostream>
using namespace std;
struct X {
X() {
cout << "X()\n";
}
X(X&) {
cout << "X(X&)\n";
}
~X() {
cout << "~X()\n";
}
};
int main()
{
try {
try {
X x;
throw x;
}
catch (X& x) {
cout << "1\n";
throw;
}
}
catch(X) {
cout << "2\n";
}
return 0;
}
X()
X(X&)
~X()
1
X(X&)
2
~X()
~X()
гцц почему то копирует X при входе в catch(X). msvc не копирует.
Почему гцц ведет себя в этом случае как при catch(X x)? Как это должно работать?
В Страуструпе сказано о том что при throw копирование обязательно происходит, но про catch он как-то умалчивает.