Файл XCode 4.5 ‘tr1 / type_traits’ не найден

Я использую библиотеку wxwidget, и у меня есть следующая проблема:

#if defined(HAVE_TYPE_TRAITS)
#include <type_traits>
#elif defined(HAVE_TR1_TYPE_TRAITS)
#ifdef __VISUALC__
#include <type_traits>
#else
#include <tr1/type_traits>
#endif
#endif

здесь #include не найдено. Я использую компилятор Apple LLVM 4.1. (с диалектом c ++ 11).
Если я переключаюсь на компилятор LLVM GCC 4.2, у меня там нет ошибок, но главная проблема в том, что все включения c ++ 11 не будут работать.

Как я могу либо использовать компилятор GCC, но с помощью стандарта c ++ 11, либо сделать так, чтобы LLVM мог его найти?

Любая помощь могла бы быть полезна.

7

Решение

Я предполагаю, что у вас «Стандартная библиотека C ++» установлена ​​на «libc ++». Если это так, вы хотите <type_traits>не <tr1/type_traits>, libc ++ предоставляет вам библиотеку C ++ 11, тогда как libstdc ++ (которая также используется по умолчанию в Xcode 4.5) предоставляет вам библиотеку C ++ 03 с поддержкой tr1.

Если вы хотите, вы можете автоматически определить, с какой библиотекой вы пользуетесь:

#include <ciso646>  // detect std::lib
#ifdef _LIBCPP_VERSION
// using libc++
#include <type_traits>
#else
// using libstdc++
#include <tr1/type_traits>
#endif

Или в вашем случае возможно:

#include <ciso646>  // detect std::lib
#ifdef _LIBCPP_VERSION
// using libc++
#define HAVE_TYPE_TRAITS
#else
// using libstdc++
#define HAVE_TR1_TYPE_TRAITS
#endif
13

Другие решения

Это команда, которую я использовал для создания wxWidgets против libc ++ (LLVM C ++ Standard Library). Должен работать на Yosemite и позже (по крайней мере, пока Apple снова не сломает все):

mkdir build-cocoa-debug
cd build-cocoa-debug
../configure --enable-debug --with-macosx-version-min=10.10
make -j8 #This allows make to use 8 parallel jobs
3

Немного изменен код выше, чтобы избежать жалоб компилятора:

Вставьте следующее в strvararg.h как раз перед #ifdefined (HAVE_TYPE_TRAITS)

#include <ciso646>  // detect std::lib
#ifdef _LIBCPP_VERSION
// using libc++
#ifndef HAVE_TYPE_TRAITS
#define HAVE_TYPE_TRAITS 1
#endif
#else
// using libstdc++
#ifndef HAVE_TR1_TYPE_TRAITS
#define HAVE_TR1_TYPE_TRAITS 1
#endif
#endif
0
По вопросам рекламы [email protected]