Questo codice compila e funziona come previsto (si getta in fase di esecuzione, ma non importa):C++ template errore di compilazione: atteso primaria espressione prima di '>' token
#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;
}
Ma appena aggiungo modelli e modificare il prototipo foo
in
template<class ptree>
void foo(ptree &pt)
ottengo un errore nel GCC:
test_ptree.cpp: In function ‘void foo(ptree&)’:
test_ptree.cpp:7: error: expected primary-expression before ‘>’ token
ma nessun errore con MSVC++! L'errore è nella riga contrassegnata <---
. E ancora, se cambio la linea problema in
--- std::cout << pt.get<std::string>("path"); // <---
+++ std::cout << pt.get("path", "default value");
l'errore scompare (il problema è in esplicita <std::string>
).
Boost.PropertyTree richiede Boost> = 1.41. Per favore aiutami a capire e correggere questo errore.
Vedi Templates: template function not playing well with class’s template member function - una domanda popolare simile contenente altre buone risposte e spiegazioni.
correlati: http://stackoverflow.com/questions/1682844/ template-template-function-not-playing-well-with-classs-template-member-functi/1682885 (Duplicato?) – GManNickG
Sì, è un duplicato. Grazie per l'aiuto! –