テンプレート・テンプレート・パラメータ
C++テンプレートテクニック 2-8
template<class T> class CClass { T<int> m_x; };
$ cl /W4 /EHsc main.cpp Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. main.cpp main.cpp(6) : error C2059: 構文エラー : '<' main.cpp(7) : コンパイルされたクラスの テンプレート のインスタンス化 'CClass<T>' の参照を確認してください main.cpp(6) : error C2238: ';' の前に無効なトークンがあります。
上記のように、テンプレートを利用した型の名前の部分だけをテンプレートとするような処理はコンパイルエラーとなる。
これを解決するために、class Tという型がテンプレートであることを明示する方法がある。
// テンプレート・テンプレート・パラメータ template<template<class M> class T> class CClass { T<int> m_x; };
class Tはclass Mを受け取るテンプレートの型である、という宣言。
と、いう風に本を読んだ限りこう認識したけど考え方あってるかな・・・。