Я использую библиотеку 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 мог его найти?
Любая помощь могла бы быть полезна.
Я предполагаю, что у вас «Стандартная библиотека 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