Этот код неверен (опечатка). В этой ситуации должно быть typename
или class
.
Однако это не означает, что все параметры шаблона должны начинаться с typename
/ class
. Это связано с тем, что помимо типов параметр шаблона также может быть целочисленной константой, поэтому работает следующий код:
// template <int n>, but n is not used, so we can ignore the name.
template <int>
void foo(std::vector<int>* x) {
}
int main () {
foo<4>(0);
}
и следующее:
typedef int U;
// template <U n>, but n is not used, so we can ignore the name.
template <U>
void foo(std::vector<U>* x) {
}
int main () {
foo<4>(0);
}
Вот почему я спросил, является ли U
typedef в комментарии.