constant-initialization 第二回戦(多分)
@kikairoya あー,んー,まー,本当は規格の範疇だけでやれるのが良かったけれどこれでエミュレートは可能か…….
2012-09-10 16:44:31@Cryolite 規格の範疇なら、main() の先頭で生成するオブジェクトのコンストラクタで同じことをやるとか
2012-09-10 16:45:27@kikairoya あ,っていうか本来見せたいことは「constant-init. じゃないと static-init. 以上 dynamic-init. 未満なものが見えて, constant-init. だと初期化が完全に完了した状態しか見えない」なので……えーと?
2012-09-10 16:48:49@Cryolite あ、グローバルなオブジェクトに対してはこれじゃだめだ、意味が無い。 適当に用意したグローバルなオブジェクトのコンストラクタの中でスレッド作って読みに行くとかそういう
2012-09-10 16:50:43@kikairoya んー,理想としては「struct S{ S()... }; を定義して, S のデフォルトコンストラクタに constexpr 付けるか付けないかで S の非 const グローバルオブジェクトの初期化の様相が変わる」を見せたいので,スレッド起動するとなー.
2012-09-10 16:54:47@kikairoya 「constexpr 付けないと S::S が走る前が見えて, constexpr 付けると S::S が走った後しか見えない.」だけど, dynamic-init の間ではこれ普通なので「『見える・見えない』が main 関数の中から」で.
2012-09-10 16:59:18@kikairoya https://t.co/MPGIh97M [basic.start.init]/4
2012-09-10 17:02:22@Cryolite まず before the first odr-use of (ry な初期化を実装している処理系を持ってこないとしょーがない
2012-09-10 17:06:12@kikairoya おそらく規格的には DSO の lazy loading を想定してるんじゃないかと思うけれど,自分が探した感じだと http://t.co/Gpp6FVmk とか? ただし,環境が用意できないのでわからん.
2012-09-10 17:06:28@kikairoya MSVC の delay load は,挙動としてはこの範疇に入らないのですかね?
2012-09-10 17:09:11@kikairoya いずれにせよ規格上はこの挙動が許されているので,constant-init.が超重要で,constant-init.が無いとmain関数に入った後からでも普通に恐ろしい事態が発生する可能性がががが,という論旨でconstepxrの重要性を説きたい.
2012-09-10 17:13:52@kikairoya MSVC の delay load か sun の lazy loading がこの挙動なら,実環境としては無視するわけにはいかんのではないかと~.
2012-09-10 17:16:34@kikairoya まー, sun のなら…… MSVC は試してもそもそも constexpr が実装されていないので悲しい.
2012-09-10 17:18:34