次のコードが予期しないハンドラーを呼び出すことを期待していますが、代わりに終了ハンドラーが呼び出されます。
#include <except>
#include <iostream>
void my_terminate() {
std::cerr << "my terminate handler";
std::exit(0);
}
void my_unexpected() {
std::cerr << "my unexpected handler";
std::exit(EXIT_FAILURE);
}
#pragma argsused
int main(int argc, char* argv[])
{
std::set_terminate(my_terminate);
std::set_unexpected(my_unexpected);
try {
throw std::exception();
} catch (const std::logic_error&) {
}
return 0;
}
C++ Builder 6 開発者ガイドでは、カスタムの予期しないハンドラーを 経由でインストールすることを明示的に推奨していますset_unexpected()
。何が間違っているのでしょうか、それとも単に C++-Builder 6 のバグなのでしょうか?