constant-initialization 第二回戦(多分)
std::call_once_flagのコンストラクタにconstexprが付いてるのだけど、std::call_once()は非const参照をとるからconstexprにしても仕方ない気がするのだけど、これは何に使うのだろう。
2012-09-10 15:01:16@cpp_akira https://t.co/d8ruRCwj https://t.co/QJJvynTa
2012-09-10 15:04:17@cpp_akira (1)バイナリを読む (2)DSO内で定義されたグローバル変数の初期化がDSOのロード時まで遅延される環境を用意する
2012-09-10 15:35:40@kikairoya 【急募】「バイナリを読む」以外の手段で, C++ の規格の範囲内で constant-initialization とそうでない初期化の違いが検出できる方法.
2012-09-10 15:42:34@Cryolite GCC/GNU binutils の環境に限れば、static initialization用のguard variableが定義されてるかどうかを見れば判別できる気はするが
2012-09-10 16:03:27@kikairoya race が起きていても良いので,とにかく zero-init. 以上 static-init. 未満の状態が「見えたっ!」ってなる標準の範囲内のコードなら何でも良いんだけどにゃー?
2012-09-10 16:12:12@kikairoya static-init. だとill-formed なコードからそれが見える可能性があり,なおかつ constant-init. なら論理的にそれが見えることが(恐らく)無く,したがってこれが constant-init が強力であることの根拠になるので
2012-09-10 16:36:18@kikairoya ill-formed なコードで良いので, zero-init 以上 static-init. 未満な瞬間を捕まえられたら良いかな~,と.
2012-09-10 16:37:13@kikairoya あ,ごめんちゃい! 用語間違えた! static-init. って書いてたの, dynamic-init. の間違いだった!
2012-09-10 16:41:12@kikairoya で,まー,まさに別スレッドでメモリぺろぺろすることを考えてました. mutex や once_flag のデフォルトコンストラクタに付いている constexpr はまさにその状況で安全に動作させるためのものなので.
2012-09-10 16:42:40@Cryolite それならグローバルに置いてあるオブジェクトを __attribute__((constructor)) な関数の中でポインタか参照経由で触ればよい
2012-09-10 16:42:46@Cryolite function-local な static-duration の object だとポインタ捏造して覗くしかないかな
2012-09-10 16:43:52