Why some include files only reside in tr1?

三世轮回 提交于 2019-12-10 03:42:01

问题


When I try to include things like <unordered_map> it fails and says the file doesn't exist, while when I try to include <tr1/unordered_map> it works. however, the include files that are present also in c++03 are found, and are c++11 (like <vector> has move constructor). Also, headers that are only in c++11 and not in tr1 are found normally as well, like <thread>.
Its like everything that was new in tr1 was just thrown into tr1 folder and everything else into normal include.
Why is this happening? Is there any fix to it without modifying source files?
Passing -I/path/to/include/tr1 won't work because everything is in the tr1 namespace.
The compiler I'm using is

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

回答1:


TR1 (technical report 1) is not a standard, but merely a report. It is an official way of letting people know that the committee is interested in this area. Any tr1 implementation is an experimental release aimed at getting field feedback for the purpose of bettering a future standard.

Using Apple's Xcode 4.2 you can choose a nearly complete C++11 library by searching your build settings for "libc++" and then choose "libc++" as the C++ Standard Library (it is not the default).

Or if you prefer the command line you can -stdlib=libc++.

libc++ does not contain any tr1 components, but does contain all of C++11 except for <atomic>.




回答2:


Add both the following parameters to clang++:

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



回答3:


Yes different compilers treat TR1 headers differently. GCC for example does the same thing that you experienced whereas MVS accepts <unordered_map>. One way to work around it is to use boost/tr1/unordered_map.hpp if cross platform or multiple compiler compilation is necessary for you.



来源:https://stackoverflow.com/questions/7870897/why-some-include-files-only-reside-in-tr1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!