Exception

Boost.Exception

ぎゃー、既にBoost.ExceptionにN2179が取り込んでありました、、、。 http://tinyurl.com/2bkojl エラー情報が大きくなりすぎた辺りから、rejectっぽいなぁと思って読んでませんでした。 boost::throw_exception()で投げるときにclone機能を追加するみたいで…

N2179 ひとまず終了

コピー失敗時のstd::bad_allocに対応しました。 差分 テストコードもg++とVC++でコピーコンストラクタの呼ばれるタイミングが違うので修正しています。 これ書いていて気が付いたんですけど、copy_exception()の定義、 template<class E> inline exception_ptr copy_e</class>…

N2179エミュレーション

N2179のg++での実装は諦めて、汎用のエミュレーション実装を追加しました。 <hamigaki/exception/common/exception.hpp> まだ、多重例外時のbad_allocには未対応です。 実装はおおよそN2179提案者のPeter Dimov氏のものと同じです。 http://www.pdimov.com/cpp/N2179/exception_ptr.cpp 相違点は、 例</hamigaki/exception/common/exception.hpp>…

current_exception()の失敗

current_exception()が失敗したら、std::bad_alloc用のexception_ptrを返すようにしました。 <hamigaki/exception/msvc/exception.hpp>の差分 std::bad_alloc用のexception_ptrをstaticに持つ方法もありますが、ヘッダonlyで済ませたかったこともあり、exception_ptrに特殊な状態を追加して、これでs</hamigaki/exception/msvc/exception.hpp>…

N2179: Language Support for Transporting Exceptions between Threads

よく見たらC++0xのドラフトにはN2179で提案された例外の転送機能が含まれていたので、実装してみました。 今日の差分 とりあえずVC++だけ対応です。まだ、一部多重例外になる箇所が残っています。 こんな感じに使えます。 #include <hamigaki/exception.hpp> struct my_exception{}; </hamigaki/exception.hpp>…

スレッドを超えて例外を伝播させる その2

例外伝播テストをVC++に対応させました。 差分 あと、g++でスタック巻き戻し中で保留中の例外がある間に別の例外を投げて、その例外を伝播させようとするとクラッシュしていたので修正しました。 差分 まだ細かいバグは残ってると思うんですが、一応g++とVC+…

スレッドを超えて例外を伝播させる

今日は少し脱線して、以前から試してみたかった、スレッドを超えて例外を伝播させることに挑戦してみました。 propagate_test.cpp とりあえず、g++限定です。 例外オブジェクトはスタックに置くことはできないので、ヒープや自由領域と似たメモリに置かれて…

Exception lib proposal

Boost MLで例外ライブラリが提案されていました。 http://lists.boost.org/Archives/boost/2006/06/106965.php http://lists.boost.org/Archives/boost/2006/06/106607.php面白いのは情報の付加の仕方です。普通に考えると、基本となる新しい例外クラスを作…