Ответ 1
Вот пример, где требуется this->template
. Однако это не соответствует примеру OP:
#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).