Вы ошиблись. Должно быть
template<typename U, typename D = std::allocator<U>
> class Z = std::vector
Распределитель std::vector
не является шаблоном. Тогда объявление cc
становится
Z<T> cc;
Поскольку вы указали аргумент по умолчанию для распределителя, вам не нужно передавать для него никакого аргумента. Если вы хотите, вам нужно будет передать std::allocator<T>
или какой-либо другой распределитель снова
Z<T, std::allocator<T> > cc;
// or T<T, my::funny:allocator> cc;
Аргумент по умолчанию для параметра аргумента шаблона шаблона не «наследуется» для соответствующего параметра шаблона вашего шаблона класса / структуры. Вам нужно указать его снова, как указано выше (указав std::allocator<U>
в качестве аргумента шаблона по умолчанию).