Этот код компилируется и работает как ожидалось (он запускается во время выполнения, но неважно):
#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;
}
Но как только я добавляю шаблоны и изменяю прототип foo
в
template<class ptree>
void foo(ptree &pt)
Я получаю сообщение об ошибке в GCC:
test_ptree.cpp: In function ‘void foo(ptree&)’:
test_ptree.cpp:7: error: expected primary-expression before ‘>’ token
но никаких ошибок с MSVС++! Ошибка находится в отмеченной строке <---
. И снова, если я изменю проблемную строку на
--- std::cout << pt.get<std::string>("path"); // <---
+++ std::cout << pt.get("path", "default value");
ошибка исчезает (проблема в явном <std::string>
).
Boost.PropertyTree требует Boost >= 1.41. Пожалуйста, помогите мне понять и исправить эту ошибку.
См. Шаблоны: функция шаблона не очень хорошо работает с функцией члена шаблона классов - аналогичный популярный вопрос, содержащий другие хорошие ответы и объяснения.