Не существует такого понятия, как максимальный размер класса шаблона, особенно если этот класс содержит экземпляр аргумента шаблона, как ваш. Рассмотрим каждый из
template <typename T> class MyClass {
public:
MyClass() { };
MyClass(T& t) : _t(t) { }
private:
T _t;
};
union TestUnion {
MyClass<char>;
MyClass<unsigned char>;
MyClass<signed char>;
MyClass<short>;
// ...
MyClass<float>;
MyClass<double>;
MyClass<char*>;
MyClass<int*>;
// ...
MyClass<void*>;
MyClass<void (*)(void)>;
MyClass<std::vector>;
// ...
MyClass<int[10]>;
MyClass<int[100]>;
MyClass<int[1000]>;
MyClass<int[10000]>;
MyClass<int[100000]>;
};
и так далее ... Или, что не менее увлекательно, вставить
MyClass< MyClass< MyClass< ... < XImage > ... > > >
(по общему признанию, не гарантируется, что он будет работать больше, чем обещанная максимальная глубина создания вложенного шаблона (сейчас 17, скоро 1024)).
Итак, очевидно, что теоретического максимума нет. Если вы имеете в виду вселенную типов, которая фактически будет параметрами шаблона для MyClass <>, то это может быть выполнимо.
EDIT - заменено <на <code><, чтобы аргумент шаблона не был скрыт парсером SO.