我正在用gcc4.7编译一些代码,它是为c++11编写的,但我希望它与gcc4.4兼容。奇怪的是,使用std::map::at() (只应该在c++11中定义)的代码似乎没有给我编译错误,即使我删除了-std=c++11标志。我希望得到编译器错误,因为这段代码必须与可能不使用gcc4.7的同事共享。这是正常的吗?是否有办法限制std::map的行为?
发布于 2013-11-08 19:09:11
显然,用一个新的gcc和新的图书馆是不可能做到这一点的,至少不自己编写它们。
作为一种实用的解决方案,假设您有一台相对现代的PC (内存的6+GB,也许4GB就可以了),我建议您
这方面的好处是,您可以轻松地设置尽可能多的不同环境和OSes,以保持与最新版本的兼容性,并保持主开发操作系统的最新更新。
最初对理想世界的回答是,在理想的世界里,一切都是正确的:
要获得严格的C++03,请使用以下标志:
-std=c++03 -pedantic另外,如果你只想支持gcc,你可能会想要-std=g++03“标准”,但除非有一些特定的特性,比如C99风格的VLA,你真的想要使用,那么我建议你不要这么做。您永远不知道您或其他人将来可能会使用哪种编译器。
另外,还建议您(至少如果您也想修复这些警告):-Wall -Wextra
可悲的现实,看起来选择C++标准确实解决不了问题。据我所知,在gcc编译器中,这实际上不是一个问题,而是GNU C++标准库中的一个问题,它显然不检查所需的C++标准版本(#ifdef在头文件中)。如果它困扰您,您可能会考虑提交错误报告 (如果已经没有,尽管我没有在快速搜索中找到一个)。
https://stackoverflow.com/questions/19866316
复制相似问题