クラステンプレートの部分特殊化
部分特殊化したときのtypename Tは何型なのか?
// template<typename T> class A { vector<T> v_; }; // 引数がポインタの場合 template<typename T> class A<T*> { vector<T*> v_; }; // 引数がT constの場合 template<typename T> class A<T const> { //vecotr<T const> v_ // これはill-formed vector<T> v_; }; int main() { A<int> a1; A<int*> a2; A<int const> a3; //A<int const*> a4; //A<int *const> a5; //A<int const*const> a6; }
どうやら、部分特殊化の条件に当てはまったときの差分が
T型に割り当てられるようです
A<const int>
は特殊化条件A<T const>
に当てはまりT=int
になり
A<int*>
は同様にA<T*>
に当てはまりT=int
になる
したがって、部分特殊化条件で用いたキーワードは型引数から削げ落ち、
もともとのピュアな型になるようです