abnormal_exit
吉里吉里のW.DeeさんからBoost.Coroutineだとabnormal_exitが送出される場面で、Hamigaki.Coroutineだとcoroutine_exitedが送出されるとの指摘を受けたので、abnormal_exitを実装してみました。
差分
abnormal_exitはコルーチン内で例外を捕捉しなかった場合に、コルーチンの呼び出し側で送出される例外です。
例外は実行コンテキストを超えて送出することができないので、この例外は型情報のみを伝達します。
class abnormal_exit : public std::exception { public: // Boost.Coroutineと違い、引数はポインタ explicit abnormal_exit(const std::type_info* = 0); // いつもの const char* what() const throw(); // virtual // 未捕捉例外の型情報を返す const std::type_info& type() const; // type()のポインタ版(Hamigaki.Coroutine独自拡張) const std::type_info* type_ptr() const; };
C++の制約上、catch(...)の中だと型情報を調べることができないので、std::exceptionで捕捉できたものに対しては型情報をセットして、それ以外の場合はtype_ptr()が0になるようにしています。
type_ptr()==0の場合、Boost.Coroutineとの互換性のため、type()はunknown_exception_tagの型情報を返します。
また、リファレンスだけですがドキュメントも更新しました。
http://hamigaki.sourceforge.jp/doc/html/coroutine.html