static initialization vs ODR violation

  • まず、ODR violation対策のこれを参照
    • msvcは、上の_1を(optimizerがないと?)statically-initializeできない
    • gccは、_1はstatically-initializeできるが、placeholder const *p_1 = &_1; のように使った場合、p_1をstatically-initializeできない
  • 結局、static-initializationが欲しいなら単にconstを付けるしかないと思われる
    • Boost.ProtoやBoost.Xpressiveはそうしている
  • static-initializationは、特に効率面から重要