Este código se compila y funciona como se esperaba (se lanza en tiempo de ejecución, pero no importa):C++ plantilla de error de compilación: se espera primaria-expresión antes '>' símbolo
#include <iostream>
#include <boost/property_tree/ptree.hpp>
void foo(boost::property_tree::ptree &pt)
{
std::cout << pt.get<std::string>("path"); // <---
}
int main()
{
boost::property_tree::ptree pt;
foo(pt);
return 0;
}
Pero tan pronto como añadir plantillas y cambiar el prototipo foo
en
template<class ptree>
void foo(ptree &pt)
consigo 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 de la línea problema en
--- std::cout << pt.get<std::string>("path"); // <---
+++ std::cout << pt.get("path", "default value");
desaparece el error (el problema está en <std::string>
explícita).
Boost.PropertyTree requiere Boost> = 1.41. Por favor, ayúdame a comprender y corregir este error.
Ver Templates: template function not playing well with class’s template member function - una pregunta popular similar que contiene otras buenas respuestas y explicaciones.
relacionadas: http://stackoverflow.com/questions/1682844/ templates-template-function-not-playing-well-with-classs-template-member-functi/1682885 (¿Duplicado?) – GManNickG
Sí, es un duplicado. ¡Gracias por tu ayuda! –