当我尝试包含诸如<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)
答案 0 :(得分:11)
TR1(技术报告1)不是标准,而仅是报告。这是让人们知道委员会对这个领域感兴趣的官方方式。任何tr1实现都是一个实验性版本,旨在获得现场反馈,以便改进未来的标准。
使用Apple的Xcode 4.2,你可以通过搜索“libc ++”的构建设置来选择一个几乎完整的C ++ 11库,然后选择“libc ++”作为C ++标准库(它不是默认的)。
或者,如果您更喜欢命令行,则可以使用-stdlib = libc ++。
libc ++不包含任何tr1组件,但包含除<atomic>
之外的所有C ++ 11。
答案 1 :(得分:7)
将两个以下参数添加到clang ++:
-std=c++11 -stdlib=libc++
答案 2 :(得分:1)
是的,不同的编译器对TR1标头的处理方式不同。例如,GCC与您经历的事情相同,而MVS接受<unordered_map>
。解决它的一种方法是使用boost/tr1/unordered_map.hpp
如果您需要跨平台或多个编译器编译。