Почему некоторые включаемые файлы находятся только в tr1? - PullRequest
7 голосов
/ 24 октября 2011

Когда я пытаюсь включить такие вещи, как <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)

Ответы [ 3 ]

11 голосов
/ 24 октября 2011

TR1 (технический отчет 1) - это не стандарт, а просто отчет.Это официальный способ сообщить людям, что комитет заинтересован в этой области.Любая реализация tr1 - это экспериментальный выпуск, предназначенный для получения обратной связи с целью улучшения будущего стандарта.

Используя Apple Xcode 4.2, вы можете выбрать почти полную библиотеку C ++ 11, выполнив поиск в настройках сборки для «libc ++»."и затем выберите" libc ++ "в качестве стандартной библиотеки C ++ (это не значение по умолчанию).

Или, если вы предпочитаете командную строку, вы можете -stdlib = libc ++.

libc ++ не содержитлюбые компоненты tr1, но содержат все C ++ 11, кроме <atomic>.

7 голосов
/ 22 августа 2013

Добавьте оба следующие параметры для clang ++:

-std=c++11 -stdlib=libc++ 
1 голос
/ 24 октября 2011

Да, разные компиляторы по-разному обрабатывают заголовки TR1. Например, GCC делает то же самое, что и вы, тогда как MVS принимает <unordered_map>. Один из способов обойти это - использовать boost/tr1/unordered_map.hpp, если вам необходима кросс-платформенная или множественная компиляция.

...