7

当我尝试包含<unordered_map>它失败并说该文件不存在时,而当我尝试包含<tr1/unordered_map>它时它会起作用。但是,找到了 c++03 中也存在的包含文件,并且是 c++11(如<vector>具有移动构造函数)。此外,仅在 c++11 中而不在 tr1 中的标头也可以正常找到,例如<thread>.
就像 tr1 中的所有新内容都被放入 tr1 文件夹中,而其他所有内容都被放入正常包含中。
为什么会这样?在不修改源文件的情况下是否有任何修复?
传递-I/path/to/include/tr1不起作用,因为所有内容都在 tr1 命名空间中。
我正在使用的编译器是

Apple clang version 3.0 (tags/Apple/clang-211.10.1) (based on LLVM 3.0svn)
4

3 回答 3

11

TR1(技术报告1)不是一个标准,而仅仅是一份报告。这是让人们知道委员会对该领域感兴趣的官方方式。任何 tr1 实现都是一个实验版本,旨在获得现场反馈,以改善未来的标准。

使用 Apple 的 Xcode 4.2,您可以通过在构建设置中搜索“libc++”来选择一个几乎完整的 C++11 库,然后选择“libc++”作为 C++ 标准库(它不是默认值)。

或者,如果您更喜欢命令行,您可以使用 -stdlib=libc++。

libc++ 不包含任何 tr1 组件,但包含所有 C++11,除了<atomic>.

于 2011-10-24T13:09:38.930 回答
7

将以下两个参数添加到 clang++:

-std=c++11 -stdlib=libc++ 
于 2013-08-21T21:07:16.797 回答
1

是的,不同的编译器对 TR1 头文件的处理方式不同。例如,GCC 做的事情和你经历的一样,而 MVS 接受<unordered_map>. 解决它的一种方法是使用boost/tr1/unordered_map.hpp跨平台或多编译器编译是否对您来说是必要的。

于 2011-10-24T10:58:58.687 回答