Error de comstackción de la plantilla de C ++: expresión primaria esperada antes del token ‘>’

Este código comstack y funciona como se espera (se lanza en tiempo de ejecución, pero no importa):

#include  #include  void foo(boost::property_tree::ptree &pt) { std::cout << pt.get("path"); // <--- } int main() { boost::property_tree::ptree pt; foo(pt); return 0; } 

Pero tan pronto como agrego plantillas y cambio el prototipo de foo en

 template void foo(ptree &pt) 

Me sale un error en GCC:

 test_ptree.cpp: In function 'void foo(ptree&)': test_ptree.cpp:7: error: expected primary-expression before '>' token 

pero no hay errores con MSVC ++! El error está en la línea marcada <--- . Y de nuevo, si cambio la línea de problema en

 --- std::cout << pt.get("path"); // <--- +++ std::cout << pt.get("path", "default value"); 

el error desaparece (el problema está en explícito ).

Boost.PropertyTree requiere Boost> = 1.41. Por favor ayúdame a entender y corregir este error.


Consulte Plantillas: la función de plantilla no funciona bien con la función de miembro de plantilla de clase : una pregunta popular similar que contiene otras buenas respuestas y explicaciones.

Necesitas hacer:

 std::cout << pt.template get("path"); 

Use la template en la misma situación que typename , excepto los miembros de plantilla en lugar de los tipos.

(Es decir, dado que pt::get es un miembro de plantilla que depende de un parámetro de plantilla, debe decirle al comstackdor que es una plantilla).