C++ C++;模板编译错误:在‘&燃气轮机’;代币

C++ C++;模板编译错误:在‘&燃气轮机’;代币,c++,visual-c++,gcc,boost,compiler-errors,C++,Visual C++,Gcc,Boost,Compiler Errors,这段代码按照预期编译和工作(它在运行时抛出,但没关系): 我在GCC中得到一个错误: test_ptree.cpp: In function ‘void foo(ptree&)’: test_ptree.cpp:7: error: expected primary-expression before ‘>’ token 但是MSVC++没有错误!错误在标记行中,您需要执行以下操作: std::cout << pt.template get<std::string

这段代码按照预期编译和工作(它在运行时抛出,但没关系):

我在GCC中得到一个错误:

test_ptree.cpp: In function ‘void foo(ptree&)’:
test_ptree.cpp:7: error: expected primary-expression before ‘>’ token
但是MSVC++没有错误!错误在标记行
中,您需要执行以下操作:

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

std::cout-Related:(重复?)是的,它是重复的。谢谢你的帮助!这回答了你的问题吗?很抱歉挖掘这个,但是如果你说这是一个副本,它应该被标记为这样的IMHO:)很好。您是否有用于模板使用的特定资源?我问是出于好奇。我的书似乎没有解决这个问题。“机会:我不难过,尽管你可能会发现一个,即C++模板,完整的指南。为什么你需要告诉编译器它是模板?难道编译器不能自己解决这个问题吗?@ HeloOuty:我不记得C++中理论上可能的编译器是否总是正确推断,可能不是。问题是,如果没有
模板
,它可能被解析为
(pt.get)(“path”),即比较。在这种情况下,类型名的比较是不可能的,因此它可以计算出来,但一般来说,您将如何解析
pt.val<5>(10)
?添加
template
直接告诉编译器“这是一个函数调用”。啊,好吧,这又是比较运算符和模板表示法的旧的不兼容问题了…:P哦,这是有道理的。我猜D编程语言在这里占上风的是它的
(…)
模板语法,而不是C++'
语法:)
test_ptree.cpp: In function ‘void foo(ptree&)’:
test_ptree.cpp:7: error: expected primary-expression before ‘>’ token
--- std::cout << pt.get<std::string>("path"); // <---
+++ std::cout << pt.get("path", "default value");
std::cout << pt.template get<std::string>("path");