dynamic initialization

  • ある種の静的なオブジェクトはmain関数の前に初期化されることは保証されていないらしい(標準の3.6.2の3)
  • 実際には、
    • みんなやってきたので大丈夫
    • 保証されてないと仮定すると矛盾が生じるので大丈夫
  • ということらしい・・・・・・参照
  • そこでヘッダに処理を書く怪しいマクロ・・・ソースコード

[]#include[] []<map>[]
[]#include[] []<pstade/comma_protect.hpp>[]
[]#include[] []<pstade/statement.hpp>[]
[]#include[] []<pstade/instance.hpp>[]

[]PSTADE_INSTANCE[][]([][]int[][], [][]x[][], [][]value[][])[]
[]PSTADE_INSTANCE[][]([][]int[][], [][]y[][], ([][]12[][]))[]

[]PSTADE_STATEMENT[][]([][]Hello[][],[]
[]pstade[][]::[][]comma_protect[][]<[][]void[][]([][]std[][]::[][]map[][]<[][]int[][],[][]int[][]>)>::[][]type[] []m[][];[]
[]m[][][[][]y[][]] = [][]5[][];[]
[]x[][] = [][]m[][][[][]12[][]];[]
[])[]

[]PSTADE_STATEMENT[][]([][]Hi[][],[]
[]x[][] += [][]1[][];[]
[])[]

[]void[] []test[][]()[]
[]{[]
[]BOOST_CHECK[][]([][]x[][] == [][]6[][]);[]
[]BOOST_CHECK[][]([][]y[][] == [][]12[][]);[]
[]}[]

[]int[] []test_main[][]([][]int[][], [][]char[][]*[])[]
[]{[]
[] ::[][]test[][]();[]
[]return[] []0[][];[]
[]}[]