Eu escrevi o código abaixo...
#include <iostream>
using namespace std;
struct Error {
Error() { cout << "Constructor called\n"; }
Error(const Error&) { cout << "Copy Constructor called\n"; }
};
void test() {
throw Error();
}
int main() {
try {
test();
}
catch (Error e) {
}
}
Estou obtendo a seguinte saída no C++17 e versões posteriores...
Constructor called
Copy Constructor called
Até mesmo a elisão de cópia garantida do C++17 diz "Copy elision is mandatory in Throwing and catching exceptions by value"
. Estou obtendo a "Copy Constructor called"
saída as.
Estou esquecendo de alguma coisa?