N2179: Language Support for Transporting Exceptions between Threads

よく見たらC++0xのドラフトにはN2179で提案された例外の転送機能が含まれていたので、実装してみました。
今日の差分
とりあえずVC++だけ対応です。まだ、一部多重例外になる箇所が残っています。


こんな感じに使えます。

#include <hamigaki/exception.hpp>

struct my_exception{};

int main()
{
    hamigaki::exception_ptr p;
    try
    {
        throw my_exception();
    }
    catch (...)
    {
        // 捕捉中の例外を保管する
        p = hamigaki::current_exception();
    }

    // 上と同じ意味
    p = hamigaki::copy_exception(my_exception());

    try
    {
        // 保管しておいた例外を送出する
        hamigaki::rethrow_exception(p);
    }
    catch (const my_exception&)
    {
        // ここで捕捉される
    }
}


g++での実装もやってみますが、g++だとコピーでなく移動になるので完全には実装できないと思います。