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[][];[]
[]}[]