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