Unwind-safe scope(failure)
http://t.co/yVSy6PeD ようやく要点を思い出した.これでグローバル変数消せる.寝る.
2012-03-19 03:11:47そういえばメンバ関数をtrailing-return-typeの形式で宣言したいけどその中でその他のメンバにアクセスしたいと考えた末に思いついたのが http://t.co/vWmtcxnQ
2012-03-19 03:14:54これもうちょっとカッコいい方法ある気がするんだけど思いつかない.あとそもそもこれ規格的には必要あるのかどうかも分かってない.
2012-03-19 03:17:20@decimalbloat 9.2/2 から trailing-return-type 内では PoD においては定義中のクラスは incomplete とみなされるので,たとえばやっているように dependent にして PoI まで解決を遅延する必要はあるかと.
2012-03-19 03:23:39@decimalbloat std::uncaught_exception 使えば良い気がしてきました.(いきなり振出しに戻る)
2012-03-19 21:28:05@decimalbloat いや,要するに dynamic scope に unwind のデストラクタがあったら rollback 黙らせればよいんですよね?
2012-03-19 21:31:04@decimalbloat std::uncaught_exception 使えば判定できるじゃないですか!
2012-03-19 21:42:32@Cryolite はい.しかしそれだと何か問題的なものがあったから闇資源を採掘しようとしていたのでは
2012-03-19 21:43:31@decimalbloat はい! std::uncaught_exception だけで判定すると問題があるので,まず std::uncaught_exception で判定するんですよ!
2012-03-19 21:45:40@decimalbloat SG のデストラクタで std::uncaught_exception 使うと, SG が宣言されているスコープの途中で例外が飛んできたのか,そもそも SG が宣言されている関数が unwinding で呼ばれて正常終了したのか分からないのが問題で,
2012-03-19 21:55:04@decimalbloat しかし!!! ここで SG の宣言文の位置で std::uncaught_exception を使うと……!!!
2012-03-19 21:56:46@Cryolite 宣言して初期化しようとしているまさにその瞬間に,既にuncaught_exceptionが真だったらそれはunwindingの途中!!!!!!
2012-03-19 22:02:16@decimalbloat unwind 中であることを判定するための std::uncaught_exception の呼び出しは, lexical で最初のときだけ呼び出してその値を記録すれば十分です.「lexical で最初のときだけ呼び出してその値を記録」
2012-03-19 22:08:15