This is a template template parameter. I think it's the hardest thing to understand in C++; as a fun fact, I posed a question about it a few months ago (because I needed it and didn't know it existed) and no one could help me with it.
You can use template template parameters to templatise over classes that are already templatised. For example, if you want to templatise a class for its std container type, you would do the following:
1 2 3 4 5 6 7 8 9 10 11 12 13
template <template <typename elem, typename = std::allocator<elem> > class CONT>
class MyClass
{
public:
CONT<double> mydoubles;
CONT<int> myints;
};
int main()
{
MyClass<std::vector> x; //now x.mydoubles is a vector of doubles
MyClass<std::deque> y; //now y.mydoubles is a deque of doubles.
}