Компиляция следующего кода выдаёт ошибку: error: expected primary-expression before ‘)’ token
template <typename T> struct A { template <int I> void f(); }; template <typename T> void F(A<T> &a) { a.f<0>(); // expected primary-expression before ‘)’ token } int main() { A<int> a; a.f<0>(); // This one is ok. }
Необходимо указать, что мы обращаемся к шаблонной функции:
template <typename T> void F(A<T> &a) { a.template f<0>(); }
Дискуссия