コンパイル時に、型・定数を引数として受け取り、それを加工して型・定数を返すclass template。typedef・enum・static constで戻り値を返す。 基本形は以下の通り。 //argを引数として受け取り、そのままtypeとして返すメタ関数 template< typename arg > struct func { typedef arg type; }; 型を返す場合はtypedef ... type、値を返す場合はtypedef ... valueとするのが一般的なようです。 単純な使い方。 intを渡すとintがそのまま返ってきます。 func< int >::type a = 1; //int a = 1; is_void 指定した型がvoidかどうか調べる //デフォルトはfalse template< typename T > struct is_void