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)