当我尝试包含<unordered_map>之类的东西时,它失败并说该文件不存在,而当我尝试包含<tr1/unordered_map>时,它起作用了。但是,找到的包含文件也存在于c++ 03中,并且为c++ 11(例如<vector>具有move构造函数)。此外,通常还会找到仅在c++ 11中而不在tr1中的 header ,例如<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实现都是实验性版本,旨在获得现场反馈,以改进 future 的标准。

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

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

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

关于c++ - 为什么有些包含文件仅驻留在tr1中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7870897/

10-11 23:22