2008-11-11 6 views

Respuesta

18

Es necesario poner typename delante de esa línea, ya que el tipo que haces :: iterador sobre depende de la plantilla-parámetro T. De esta manera:

template< class T > 
void example() { 
    typename std::list< boost::function<T()> >::iterator it; 
} 

Considerar la línea

std::list< boost::function<T()> >::iterator * it; 

que podría significar una multiplicación o un puntero. Es por eso que necesita typename para aclarar su intención. Sin él, el compilador no supone un tipo, y por lo tanto requiere un operador allí o un punto y coma sintácticamente.


consultar también el nuevo C++ FAQ entrada Where to put template and typename on dependent names.

Cuestiones relacionadas