C++0x エラーハンドリング設計のガイドライン

C++0xにはstd::error_codeという、OS固有のエラーコードとエラーメッセージを扱うためのクラスが提供されます。


std::error_codeが導入されることで、エラーハンドリングがしやすくなります。
たとえば、以下のようなオーバーロードを用意することで、エラーを例外で通知する版とエラーコードを返す版で分けることができます。

void foo();                    // エラーを例外で通知
void foo(std::error_code& ec); // エラーコードを返す

この場合に投げられる例外は、std::system_errorもしくはそれを派生した例外です。


このオーバーロードをドキュメントに記載する場合、C++0xでは以下のように書かれます。

void foo(std::error_code& ec=throws());


たとえば、chronoライブラリのClock::nowは以下のように書かれます。

static time_point now(error_code& ec=throws());


※ この提案はまだ採択されていません。



修正履歴:

2009/02/16 unspecified-nameをthrows()に変更(N2809 → N2828)



N2809 Library Support for hybrid error handling

N2828 Library Support for Hybrid Error Handling (Rev 1)

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