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 мог найти его ?

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

3 7

3 ответа:

Я предполагаю, что у вас есть "стандартная библиотека 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

Это команда, которую я использовал для сборки 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

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

Вставьте в 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