7

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 が を検出できるようにしますか?

どんな助けでも本当に感謝します。

4

3 に答える 3

13

「C++ 標準ライブラリ」が「libc++」に設定されていると思います。この場合、<type_traits>ではなく、 が必要です<tr1/type_traits>。libc++ は C++11 ライブラリを提供しますが、libstdc++ (Xcode 4.5 のデフォルトでもあります) は tr1 をサポートする C++03 ライブラリを提供します。

必要に応じて、使用しているライブラリを自動検出できます。

#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
于 2012-11-04T17:12:37.977 に答える
0

コンパイラの苦情を避けるために、上記のコードを少し変更しました。

以下を 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
于 2016-06-04T15:44:59.203 に答える