10 #ifndef EIGEN_CXX11WORKAROUNDS_H
11 #define EIGEN_CXX11WORKAROUNDS_H
16 #if defined(__INTEL_COMPILER) && (__INTEL_COMPILER < 1310)
17 #error Intel Compiler only supports required C++ features since version 13.1.
20 #elif defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6))
26 #pragma GCC diagnostic error "-Wfatal-errors"
27 #error GNU C++ Compiler (g++) only supports required C++ features since version 4.6.
33 #if __cplusplus <= 199711L
34 #if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER)
35 #pragma GCC diagnostic error "-Wfatal-errors"
37 #error This library needs at least a C++11 compliant compiler. If you use g++/clang, please enable the -std=c++11 compiler flag. (-std=c++0x on older versions.)
43 template <
typename T, std::
size_t N>
using array = std::array<T, N>;
55 #if defined(__GLIBCXX__) && __GLIBCXX__ < 20120322
56 #define STD_GET_ARR_HACK a._M_instance[I]
57 #elif defined(_LIBCPP_VERSION)
58 #define STD_GET_ARR_HACK a.__elems_[I]
60 #define STD_GET_ARR_HACK std::template get<I, T, N>(a)
63 template<std::
size_t I,
class T, std::
size_t N> constexpr
inline T& array_get(std::array<T,N>& a) {
return (T&) STD_GET_ARR_HACK; }
64 template<std::
size_t I,
class T, std::
size_t N> constexpr
inline T&& array_get(std::array<T,N>&& a) {
return (T&&) STD_GET_ARR_HACK; }
65 template<std::
size_t I,
class T, std::
size_t N> constexpr
inline T
const& array_get(std::array<T,N>
const& a) {
return (T
const&) STD_GET_ARR_HACK; }
67 template<std::
size_t I,
class T> constexpr
inline T& array_get(std::vector<T>& a) {
return a[I]; }
68 template<std::
size_t I,
class T> constexpr
inline T&& array_get(std::vector<T>&& a) {
return a[I]; }
69 template<std::
size_t I,
class T> constexpr
inline T
const& array_get(std::vector<T>
const& a) {
return a[I]; }
71 #undef STD_GET_ARR_HACK
73 template <
typename T>
struct array_size;
74 template<
class T, std::
size_t N>
struct array_size<const std::array<T,N> > {
75 static const size_t value = N;
77 template <
typename T>
struct array_size;
78 template<
class T, std::
size_t N>
struct array_size<std::array<T,N> > {
79 static const size_t value = N;
96 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
97 #define EIGEN_TPL_PP_SPEC_HACK_DEF(mt, n) mt... n
98 #define EIGEN_TPL_PP_SPEC_HACK_DEFC(mt, n) , EIGEN_TPL_PP_SPEC_HACK_DEF(mt, n)
99 #define EIGEN_TPL_PP_SPEC_HACK_USE(n) n...
100 #define EIGEN_TPL_PP_SPEC_HACK_USEC(n) , n...
102 #define EIGEN_TPL_PP_SPEC_HACK_DEF(mt, n)
103 #define EIGEN_TPL_PP_SPEC_HACK_DEFC(mt, n)
104 #define EIGEN_TPL_PP_SPEC_HACK_USE(n)
105 #define EIGEN_TPL_PP_SPEC_HACK_USEC(n)
112 #endif // EIGEN_CXX11WORKAROUNDS_H
Namespace containing all symbols from the Eigen library.
Definition: CXX11Meta.h:13