C++0x system_error

C++0x では、 OS 固有のエラーに関する例外を扱うクラスが提供されます。
インクルードするのは です。


では、 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.AsioBoost.FileSystem 等で
OS の低レベル API をラップする際に使用されますが
C++0x でも OS 固有の API をラップしたスレッドライブラリがあるので
その実装に使用されています。


C++0x言語拡張まとめ