为什么有些包含文件只驻留在tr1中

Why some include files only reside in tr1?

本文关键字:tr1 包含 文件 为什么      更新时间:2023-10-16

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

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

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

使用苹果的Xcode 4.2,你可以选择一个几乎完整的c++ 11库,通过搜索你的构建设置"libc++",然后选择"libc++"作为c++标准库(这不是默认的)。

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

libc++不包含任何tr1组件,但包含了除<atomic>之外的所有c++ 11组件。

为clang++添加两个参数:

-std=c++11 -stdlib=libc++ 

是的,不同的编译器对TR1头文件的处理方式不同。例如,GCC做同样的事情,而MVS接受<unordered_map>。解决这个问题的一种方法是,如果需要跨平台或多编译器编译,则使用boost/tr1/unordered_map.hpp