2010-09-11 27 views
7

¿Qué hay de malo con el siguiente fragmento de código?Error del compilador al usar entero como parámetro de plantilla

template<typename X> 
struct A { 
     template<int N> 
     int foo() const { 
       return N; 
     } 
}; 

template<typename X> 
struct B { 
     int bar(const A<X>& v) { 
       return v.foo<13>(); 
     } 
}; 

#include <iostream> 
using std::cout; 
using std::endl; 

int main() { 
     A<double> a; 
     B<double> b; 
     cout << b.bar(a) << endl; 
     return 0; 
} 

Dentro de la función B::bar el compilador se queja:

error: invalid operands of types ‘’ and ‘int’ to binary ‘operator<’

Si A no es una plantilla, todo lo compila bien.

+2

posible duplicado de la sintaxis de la plantilla [C++] (http://stackoverflow.com/questions/3621719/c-template-syntax) –

Respuesta

14

Cambio return v.foo<13>(); a return v.template foo<13>(); porque foo es un nombre dependiente y es necesario mencionar explícitamente usando .template constructo.

Cuestiones relacionadas