Duplicar posibles:
Where and why do I have to put the “template” and “typename” keywords?llamando a la función de plantilla de clase base de la plantilla
Aquí está el código:
template<typename T>
class base
{
public:
virtual ~base();
template<typename F>
void foo()
{
std::cout << "base::foo<F>()" << std::endl;
}
};
template<typename T>
class derived : public base<T>
{
public:
void bar()
{
this->foo<int>(); // Compile error
}
};
Y, cuando se ejecuta:
derived<bool> d;
d.bar();
que obtienen los siguientes errores:
error: expected primary-expression before ‘int’
error: expected ‘;’ before ‘int’
Soy consciente de non-dependent names and 2-phase look-ups. Pero, cuando la función en sí es una función de plantilla (función foo<>()
en mi código), intenté todas las soluciones provisionales solo para fallar.
¡gracias! realmente salvó mi tocino hoy – Jacko