C++0x では、 OS 固有のエラーに関する例外を扱うクラスが提供されます。
インクルードするのは
Boost.System と同じように使用することができます。
#include <iostream> #include <system_error> #include <winsock.h> using namespace std; int main() { try { // OS固有のAPIでエラーが発生したら WSADATA wsa_data; int result = ::WSAStartup(MAKEWORD(2, 0), &wsa_data); // error_codeでOS固有のエラー情報を取得してsystem_error例外を投げる if (result != 0) { throw system_error( error_code(result, get_system_category()), "winsock" ); } } catch (system_error& e) { // エラー情報出力 cout << e.code() << "," << e.what() << endl; throw; } }
system:59,winsock: 予期しないネットワーク エラーが発生しました。
Boost.System は、Boost.Asio や Boost.FileSystem 等で
OS の低レベル API をラップする際に使用されますが
C++0x でも OS 固有の API をラップしたスレッドライブラリがあるので
その実装に使用されています。