マクロに型を渡す

  • テンプレートを利用した型はコンマで区切られていることがあるので([id:Cryolite:20050326])を使うのだが、const修飾が消える (13.1/3)
    • VC++7.1は消えないので注意
  • コンマを保護するマクロを呼ぶのはユーザの責任になる
  • こうすればどうだろう (実装)
    • affectは、([id:y-hamigaki:20060726])のために生まれたのだが、使いどころが多くて基本的なものだと分かってきた
    • たとえば、Boost.Tupleのaccess_traitsは要らなくなる

[]#include[] []<utility>[]
[]#include[] []<pstade/unparenthesize.hpp>[]

[]#define[][] FOO(T, V, f, s) T V(f, s);[]

[]#define[][] BAR(T, V, f, s) PSTADE_UNPARENTHESIZE(T) V(f, s);[]


[]void[] []test[][]()[]
[]{[]
[]FOO[][]([][]const[] []PSTADE_UNPARENTHESIZE[][](([][]std[][]::[][]pair[][]<[][]int[][],[][]int[][]>)), [][]p1[][], [][]1[][], [][]2[][])[]
[]BAR[][]([][]const[][] ([][]std[][]::[][]pair[][]<[][]int[][],[][]int[][]>), [][]p2[][], [][]1[][], [][]2[][])[]

[]BOOST_CHECK[][]([][]p1[][] == [][]p2[][]);[]
[]}[]