C++ Eclipse CDT语法错误,但仍在编译

C++ Eclipse CDT语法错误,但仍在编译,c++,eclipse-cdt,C++,Eclipse Cdt,我已经安装了最新的MinGW(8.1.0),并使用eclipseneon和Photon进行了测试 #include <iostream> #include <unordered_map> int main(){ std::unordered_map<int,std::string> dict = {{1,"one"},{2,"two"}}; dict.insert({3,"three"}); for(const auto& p

我已经安装了最新的MinGW(8.1.0),并使用eclipseneon和Photon进行了测试

#include <iostream>
#include <unordered_map>

int main(){
    std::unordered_map<int,std::string> dict = {{1,"one"},{2,"two"}};
    dict.insert({3,"three"});
    for(const auto& p: dict){std::cout << p.first << " = " << p.second << std::endl;}
}
编辑2:
或者您可以将MinGW(5.1.0)与C++11方言一起使用

编辑3:

编辑4:
对于光子()

Eclipse 4.6(Neon 2016)不再受支持。(CDT 9.2)
不再支持Eclipse 4.8(光子2018)。(CDT 9.5)

Eclipse4.9(2019)现在正在上升,从CDT9.6开始。

这是一个影响GCC8标准库头的问题,在中进行了跟踪。它是针对CDT 9.6(作为Eclipse 2018-12的一部分发布)而修复的

更新:CDT 9.5.5也修复了该漏洞,该版本计划于2018年11月19日推出带外版本。如果您正在运行EclipsePhoton或更高版本,
Help->Check for Updates
应在更新退出后立即获取该更新


在此之前的一个解决方法是使用GCC 7或更早版本。

感谢您的深入了解。现在我发现我可以将参数转换为const
dict.insert(std::pair{3,“three”})是的,还有一些变通方法涉及到修改代码。我还对GCC 7、6、5、4进行了测试。但是只有GCC5.1.0可以工作(使用C++11)。(与GCC代码块使用的相同)您需要确保Eclipse正在获取新的GCC标题(例如,
#include
上的F3会将您带到正确的文件),然后重新生成索引,以使编译器的更改生效。我已经知道了,谢谢。(这是您提供的明显的使用信息)但是您可以直接构建,它会得到新的头。您可以重新索引以更正语法。(这就是我要检查的)
dict.insert(std::pair<const int,std::string>{3,"three"});