Вот пример, где требуется this->template
. Это не совсем соответствует примеру ОП:
#include <iostream>
template <class T>
struct X
{
template <unsigned N>
void alloc() {std::cout << "alloc<" << N << ">()\n";}
};
template <class T>
struct Y
: public X<T>
{
void test()
{
this->template alloc<200>();
}
};
int main()
{
Y<int> y;
y.test();
}
В этом примере this
необходим, потому что в противном случае alloc
не был бы найден в базовом классе, поскольку базовый класс зависит от параметра шаблона T
. template
необходим, потому что в противном случае "<", который предназначен для открытия списка параметров шаблона, содержащего 200, в противном случае будет указывать знак меньше чем ([temp.names] / 4). </p>