ADL Barrier
- 名前空間を限定しないで関数を呼び出すと、ADLが引き起こされて名前が衝突する可能性がある
- 完全な安全のためには、型は自分専用の名前空間にいなければならない
- そこで・・・ダウンロード
- このマクロはADLのないコンパイラでは何もしません
[]#include[] []<pstade/adl_barrier.hpp>[]
[]namespace[] []xxx[][] {[][]PSTADE_ADL_BARRIER_OPEN[][]([][]aaa[][])[]
[]struct[] []aaa[][] { };[]
[]PSTADE_ADL_BARRIER_CLOSE[][]([][]aaa[][])[]
[]void[] []begin[][]([][]aaa[][])[]
[] {[]
[]PSTADE_TEST[][]([][]false[][]);[]
[] }[]
[]}[][]namespace[] []yyy[][] {[]
[]PSTADE_ADL_BARRIER_OPEN[][]([][]bbb[][])[]
[]struct[] []bbb[][] { };[]
[]PSTADE_ADL_BARRIER_CLOSE[][]([][]bbb[][])[]
[]struct[] []end[][] { };[]
[]}[]
[]void[] []begin[][]([][]xxx[][]::[][]aaa[][]) { }[]
[]void[] []end[][]([][]yyy[][]::[][]bbb[][]) { }[][]void[] []test_adl_barrier[][]()[]
[]{[]
[]pstade[][]::[][]print[][]([][]"adl_barrier..."[][]);[][]xxx[][]::[][]aaa[] []a[][];[]
[]begin[][]([][]a[][]);[][]yyy[][]::[][]bbb[] []b[][];[]
[]end[][]([][]b[][]);[]
[]}[]