Unwind-safe scope(failure)
#bm D言語のscope(exit)文などをC++でエミュレート RT decimalbloat: http://t.co/VBENCaEL
2012-03-18 01:54:06@tyru まぁ関数のdefault/delete宣言はなくてもいいのですがラムダ式パワーはあまりにも絶大ですね…
2012-03-18 01:59:44@decimalbloat uncaught_exception 使うとスタック巻き戻しで呼ばれる関数の中でも failure に転んでしまいませんか? http://t.co/SX1wGvLL
2012-03-18 02:00:12@iorate うーん確かにその位置では呼ばれてほしくないですね…しかしその位置に関して言えばscope(failure)置くなというか,例外投げんなという話ではありますが…
2012-03-18 02:07:40しかしデストラクタで呼んでる関数の中にscope(failure)あっても呼ばれてしまう.これはアレかなー.
2012-03-18 02:14:32D言語のscope(exit)文などをC++でエミュレート RT decimalbloat: http://t.co/VBENCaEL [!ifttt, !twitter] http://t.co/WI3LR9iL | T0Cv8 http://t.co/2Bcx0Hjt
2012-03-18 02:19:41@decimalbloat これ, rollback が2回(1回目は scope guard の初期化直後に)呼ばれる可能性があるのでは?
2012-03-18 02:20:20@decimalbloat すいません. std::uncaught_exception 使うとやはり危ないと思うので, scope(exit) のみを提供して,スコープを出るときにそのスコープで宣言されたすべての scope guard を無効化する方式で行きましょう.
2012-03-18 03:26:40@decimalbloat ちょっと私が持ちうる全暗黒魔力を総投入して「そのスコープで宣言されたすべての scope guard を無効化」を簡素化してみます.
2012-03-18 03:28:34マクロの展開結果が block-declaration で良ければ,「block の nesting level が上がった時の最初の1回目の評価だけ異なるコンパイル時定数を生成」「評価するたびに結果のコンパイル時定数が1ずつ増える」あたりはかなり簡単にできることは分かった.
2012-03-19 00:20:20