質問: ### 前提・実現したいこと 例外のcatch処理に警告が出ました。 ### 発生している問題・エラーメッセージ ``` warning: exception of type 'boost::system::system_error' will be caught catch(boost::system::system_error& e) warning: by earlier handler for 'std::exception' catch(std::exception& e) ``` ### 該当のソースコード ``` #include #include #include try { ... } catch(std::exception& e) { cerr << "standard c++ library exception was occured.\n"; cerr << "error message: " << e.what() << '\n'; return 1; } catch(boost::system::system_error& e) { cerr << "boost exception was occured.\n"; cerr << "error code:\t" << e.code().value() << '\n'; cerr << "error message:\t" << e.what() << '\n'; return 1; } catch(...) { cerr << "error.\n"; return 1; } ``` どうすれば、この警告は出なくなるのでしょうか。 どうか、よろしくお願いします。
回答: こんにちは。 例外はcatchの順序に従って処理されます。 先に書いたcatchで捕まえることが出来る場合、後に書いたcatchでは捕まえられません。 boost::system::system_errorはstd::exceptionを継承している筈です。 従って、boost::system::system_error例外が投げられた時、それは、`catch(boost::system::system_error& e)`ではなく`catch(std::exception& e)`でcatchされます。 この状況はプログラマが意図していないケースが大半なので警告がでているのだと思います。 対処するにはこの2つのcatchの順序を逆にすれば良い筈です。