bug #829: Introduce macro EIGEN_HAS_CXX11_CONTAINERS and do not specialize std-containers if it is enabled.

This commit is contained in:
Christoph Hertzberg 2015-08-14 16:09:48 +02:00
parent a5d1bb2be8
commit 712e2fed17
4 changed files with 17 additions and 3 deletions

View File

@ -370,6 +370,15 @@
#endif #endif
#endif #endif
// Does the compiler support proper C++11 containers?
#ifndef EIGEN_HAS_CXX11_CONTAINERS
#if ((__cplusplus >= 201103L) && (EIGEN_COMP_GNUC_STRICT || EIGEN_COMP_CLANG)) || EIGEN_COMP_MSVC >= 1900
#define EIGEN_HAS_CXX11_CONTAINERS 1
#else
#define EIGEN_HAS_CXX11_CONTAINERS 0
#endif
#endif
/** Allows to disable some optimizations which might affect the accuracy of the result. /** Allows to disable some optimizations which might affect the accuracy of the result.
* Such optimization are enabled by default, and set EIGEN_FAST_MATH to 0 to disable them. * Such optimization are enabled by default, and set EIGEN_FAST_MATH to 0 to disable them.
* They currently include: * They currently include:

View File

@ -53,7 +53,7 @@ namespace std \
} }
// check whether we really need the std::deque specialization // check whether we really need the std::deque specialization
#if !(defined(_GLIBCXX_DEQUE) && (!EIGEN_GNUC_AT_LEAST(4,1))) /* Note that before gcc-4.1 we already have: std::deque::resize(size_type,const T&). */ #if !EIGEN_HAS_CXX11_CONTAINERS && !(defined(_GLIBCXX_DEQUE) && (!EIGEN_GNUC_AT_LEAST(4,1))) /* Note that before gcc-4.1 we already have: std::deque::resize(size_type,const T&). */
namespace std { namespace std {

View File

@ -51,8 +51,8 @@ namespace std \
}; \ }; \
} }
// check whether we really need the std::vector specialization // check whether we really need the std::list specialization
#if !(defined(_GLIBCXX_VECTOR) && (!EIGEN_GNUC_AT_LEAST(4,1))) /* Note that before gcc-4.1 we already have: std::list::resize(size_type,const T&). */ #if !EIGEN_HAS_CXX11_CONTAINERS && !(defined(_GLIBCXX_LIST) && (!EIGEN_GNUC_AT_LEAST(4,1))) /* Note that before gcc-4.1 we already have: std::list::resize(size_type,const T&). */
namespace std namespace std
{ {

View File

@ -44,6 +44,9 @@ namespace std \
}; \ }; \
} }
// Don't specialize if containers are implemented according to C++11
#if !EIGEN_HAS_CXX11_CONTAINERS
namespace std { namespace std {
#define EIGEN_STD_VECTOR_SPECIALIZATION_BODY \ #define EIGEN_STD_VECTOR_SPECIALIZATION_BODY \
@ -122,5 +125,7 @@ namespace std {
#endif #endif
}; };
} }
#endif // !EIGEN_HAS_CXX11_CONTAINERS
#endif // EIGEN_STDVECTOR_H #endif // EIGEN_STDVECTOR_H