Duplicar posible:
C++ template member function of template class called from template function¿Cómo llamar a una función de miembro de plantilla?
template<class T1>
class A
{
public:
template<class T0>
void foo() const {}
};
template<class T0,class T1>
void bar(const A<T1>& b)
{
b.foo<T0>(); // This throws " expected primary-expression before ‘>’ token"
}
puedo cambiarlo a
b->A<T1>::template foo<T0>();
que compila bien. Sin embargo, también puedo cambiarlo a
b.A<T1>::template foo<T0>();
que compila bien también. ¿eh?
¿Cómo se puede llamar correctamente a la función de miembro de la plantilla en el sentido del código original?
¿Sabemos lo que las dos declaraciones que en realidad significan de compilación? En este ejemplo "cocido" compilan, pero en mi programa real esto no compila. – ritter