diff --git a/Eigen/Core b/Eigen/Core index d6cc16260..f6f4e3108 100644 --- a/Eigen/Core +++ b/Eigen/Core @@ -94,9 +94,7 @@ // for min/max: #include -#if EIGEN_HAS_CXX11 #include -#endif // for std::is_nothrow_move_assignable #ifdef EIGEN_INCLUDE_TYPE_TRAITS diff --git a/Eigen/src/Core/ArithmeticSequence.h b/Eigen/src/Core/ArithmeticSequence.h index 331ff49cb..1c8b67038 100644 --- a/Eigen/src/Core/ArithmeticSequence.h +++ b/Eigen/src/Core/ArithmeticSequence.h @@ -16,7 +16,7 @@ namespace Eigen { namespace internal { -#if (!EIGEN_HAS_CXX11) || !((!EIGEN_COMP_GNUC) || EIGEN_COMP_GNUC>=48) +#if !((!EIGEN_COMP_GNUC) || EIGEN_COMP_GNUC>=48) template struct aseq_negate {}; template<> struct aseq_negate { @@ -140,7 +140,7 @@ protected: public: -#if EIGEN_HAS_CXX11 && ((!EIGEN_COMP_GNUC) || EIGEN_COMP_GNUC>=48) +#if (!EIGEN_COMP_GNUC) || EIGEN_COMP_GNUC>=48 auto reverse() const -> decltype(Eigen::seqN(m_first+(m_size+fix<-1>())*m_incr,m_size,-m_incr)) { return seqN(m_first+(m_size+fix<-1>())*m_incr,m_size,-m_incr); } @@ -202,7 +202,6 @@ auto seq(FirstType f, LastType l); #else // EIGEN_PARSED_BY_DOXYGEN -#if EIGEN_HAS_CXX11 template auto seq(FirstType f, LastType l) -> decltype(seqN(typename internal::cleanup_index_type::type(f), ( typename internal::cleanup_index_type::type(l) @@ -228,102 +227,11 @@ auto seq(FirstType f, LastType l, IncrType incr) CleanedIncrType(incr)); } -#else // EIGEN_HAS_CXX11 - -template -typename internal::enable_if::value || symbolic::is_symbolic::value), - ArithmeticSequence::type,Index> >::type -seq(FirstType f, LastType l) -{ - return seqN(typename internal::cleanup_index_type::type(f), - Index((typename internal::cleanup_index_type::type(l)-typename internal::cleanup_index_type::type(f)+fix<1>()))); -} - -template -typename internal::enable_if::value, - ArithmeticSequence,symbolic::ValueExpr<> >, - symbolic::ValueExpr > > > >::type -seq(const symbolic::BaseExpr &f, LastType l) -{ - return seqN(f.derived(),(typename internal::cleanup_index_type::type(l)-f.derived()+fix<1>())); -} - -template -typename internal::enable_if::value, - ArithmeticSequence::type, - symbolic::AddExpr >, - symbolic::ValueExpr > > > >::type -seq(FirstType f, const symbolic::BaseExpr &l) -{ - return seqN(typename internal::cleanup_index_type::type(f),(l.derived()-typename internal::cleanup_index_type::type(f)+fix<1>())); -} - -template -ArithmeticSequence >,symbolic::ValueExpr > > > -seq(const symbolic::BaseExpr &f, const symbolic::BaseExpr &l) -{ - return seqN(f.derived(),(l.derived()-f.derived()+fix<1>())); -} - - -template -typename internal::enable_if::value || symbolic::is_symbolic::value), - ArithmeticSequence::type,Index,typename internal::cleanup_seq_incr::type> >::type -seq(FirstType f, LastType l, IncrType incr) -{ - typedef typename internal::cleanup_seq_incr::type CleanedIncrType; - return seqN(typename internal::cleanup_index_type::type(f), - Index((typename internal::cleanup_index_type::type(l)-typename internal::cleanup_index_type::type(f)+CleanedIncrType(incr))/CleanedIncrType(incr)), incr); -} - -template -typename internal::enable_if::value, - ArithmeticSequence, - symbolic::ValueExpr<> >, - symbolic::ValueExpr::type> >, - symbolic::ValueExpr::type> >, - typename internal::cleanup_seq_incr::type> >::type -seq(const symbolic::BaseExpr &f, LastType l, IncrType incr) -{ - typedef typename internal::cleanup_seq_incr::type CleanedIncrType; - return seqN(f.derived(),(typename internal::cleanup_index_type::type(l)-f.derived()+CleanedIncrType(incr))/CleanedIncrType(incr), incr); -} - -template -typename internal::enable_if::value, - ArithmeticSequence::type, - symbolic::QuotientExpr >, - symbolic::ValueExpr::type> >, - symbolic::ValueExpr::type> >, - typename internal::cleanup_seq_incr::type> >::type -seq(FirstType f, const symbolic::BaseExpr &l, IncrType incr) -{ - typedef typename internal::cleanup_seq_incr::type CleanedIncrType; - return seqN(typename internal::cleanup_index_type::type(f), - (l.derived()-typename internal::cleanup_index_type::type(f)+CleanedIncrType(incr))/CleanedIncrType(incr), incr); -} - -template -ArithmeticSequence >, - symbolic::ValueExpr::type> >, - symbolic::ValueExpr::type> >, - typename internal::cleanup_seq_incr::type> -seq(const symbolic::BaseExpr &f, const symbolic::BaseExpr &l, IncrType incr) -{ - typedef typename internal::cleanup_seq_incr::type CleanedIncrType; - return seqN(f.derived(),(l.derived()-f.derived()+CleanedIncrType(incr))/CleanedIncrType(incr), incr); -} -#endif // EIGEN_HAS_CXX11 #endif // EIGEN_PARSED_BY_DOXYGEN namespace placeholders { -#if EIGEN_HAS_CXX11 || defined(EIGEN_PARSED_BY_DOXYGEN) /** \cpp11 * \returns a symbolic ArithmeticSequence representing the last \a size elements with increment \a incr. * @@ -349,7 +257,6 @@ auto lastN(SizeType size) { return seqN(Eigen::placeholders::last+fix<1>()-size, size); } -#endif } // namespace placeholders @@ -407,9 +314,7 @@ namespace indexing { using Eigen::seqN; using Eigen::placeholders::all; using Eigen::placeholders::last; - #if EIGEN_HAS_CXX11 using Eigen::placeholders::lastN; - #endif using Eigen::placeholders::lastp1; } diff --git a/Eigen/src/Core/Array.h b/Eigen/src/Core/Array.h index c39aa15bd..de0c7f0ea 100644 --- a/Eigen/src/Core/Array.h +++ b/Eigen/src/Core/Array.h @@ -161,7 +161,6 @@ class Array } #endif - #if EIGEN_HAS_CXX11 /** \copydoc PlainObjectBase(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args) * * Example: \include Array_variadic_ctor_cxx11.cpp @@ -198,7 +197,6 @@ class Array */ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Array(const std::initializer_list>& list) : Base(list) {} - #endif // end EIGEN_HAS_CXX11 #ifndef EIGEN_PARSED_BY_DOXYGEN template @@ -354,8 +352,6 @@ EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(std::complex, cd) #undef EIGEN_MAKE_ARRAY_TYPEDEFS #undef EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS -#if EIGEN_HAS_CXX11 - #define EIGEN_MAKE_ARRAY_TYPEDEFS(Size, SizeSuffix) \ /** \ingroup arraytypedefs */ \ /** \brief \cpp11 */ \ @@ -387,8 +383,6 @@ EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(4) #undef EIGEN_MAKE_ARRAY_TYPEDEFS #undef EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS -#endif // EIGEN_HAS_CXX11 - #define EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, SizeSuffix) \ using Eigen::Matrix##SizeSuffix##TypeSuffix; \ using Eigen::Vector##SizeSuffix##TypeSuffix; \ diff --git a/Eigen/src/Core/CwiseBinaryOp.h b/Eigen/src/Core/CwiseBinaryOp.h index 98fdabb6f..a3828d197 100644 --- a/Eigen/src/Core/CwiseBinaryOp.h +++ b/Eigen/src/Core/CwiseBinaryOp.h @@ -105,7 +105,7 @@ class CwiseBinaryOp : typedef typename internal::remove_reference::type _LhsNested; typedef typename internal::remove_reference::type _RhsNested; -#if EIGEN_COMP_MSVC && EIGEN_HAS_CXX11 +#if EIGEN_COMP_MSVC //Required for Visual Studio or the Copy constructor will probably not get inlined! EIGEN_STRONG_INLINE CwiseBinaryOp(const CwiseBinaryOp&) = default; diff --git a/Eigen/src/Core/DenseStorage.h b/Eigen/src/Core/DenseStorage.h index 19a6980b6..2f6c9889f 100644 --- a/Eigen/src/Core/DenseStorage.h +++ b/Eigen/src/Core/DenseStorage.h @@ -216,7 +216,7 @@ template class DenseSt EIGEN_DEVICE_FUNC explicit DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(internal::constructor_without_unaligned_array_assert()) {} -#if !EIGEN_HAS_CXX11 || defined(EIGEN_DENSE_STORAGE_CTOR_PLUGIN) +#if defined(EIGEN_DENSE_STORAGE_CTOR_PLUGIN) EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage& other) : m_data(other.m_data) { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = Size) @@ -224,32 +224,10 @@ template class DenseSt #else EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage&) = default; #endif -#if !EIGEN_HAS_CXX11 - EIGEN_DEVICE_FUNC - DenseStorage& operator=(const DenseStorage& other) - { - if (this != &other) m_data = other.m_data; - return *this; - } -#else EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage&) = default; -#endif #if EIGEN_HAS_RVALUE_REFERENCES -#if !EIGEN_HAS_CXX11 - EIGEN_DEVICE_FUNC DenseStorage(DenseStorage&& other) EIGEN_NOEXCEPT - : m_data(std::move(other.m_data)) - { - } - EIGEN_DEVICE_FUNC DenseStorage& operator=(DenseStorage&& other) EIGEN_NOEXCEPT - { - if (this != &other) - m_data = std::move(other.m_data); - return *this; - } -#else EIGEN_DEVICE_FUNC DenseStorage(DenseStorage&&) = default; EIGEN_DEVICE_FUNC DenseStorage& operator=(DenseStorage&&) = default; -#endif #endif EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols) { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({}) diff --git a/Eigen/src/Core/DiagonalMatrix.h b/Eigen/src/Core/DiagonalMatrix.h index cf5e906eb..d5053d643 100644 --- a/Eigen/src/Core/DiagonalMatrix.h +++ b/Eigen/src/Core/DiagonalMatrix.h @@ -180,7 +180,6 @@ class DiagonalMatrix EIGEN_DEVICE_FUNC inline DiagonalMatrix(const Scalar& x, const Scalar& y, const Scalar& z) : m_diagonal(x,y,z) {} - #if EIGEN_HAS_CXX11 /** \brief Construct a diagonal matrix with fixed size from an arbitrary number of coefficients. \cpp11 * * There exists C++98 anologue constructors for fixed-size diagonal matrices having 2 or 3 coefficients. @@ -202,7 +201,6 @@ class DiagonalMatrix EIGEN_DEVICE_FUNC explicit EIGEN_STRONG_INLINE DiagonalMatrix(const std::initializer_list>& list) : m_diagonal(list) {} - #endif // EIGEN_HAS_CXX11 /** Copy constructor. */ template diff --git a/Eigen/src/Core/Matrix.h b/Eigen/src/Core/Matrix.h index bc75a28ef..2893ddf21 100644 --- a/Eigen/src/Core/Matrix.h +++ b/Eigen/src/Core/Matrix.h @@ -281,7 +281,6 @@ class Matrix } #endif -#if EIGEN_HAS_CXX11 /** \copydoc PlainObjectBase(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&... args) * * Example: \include Matrix_variadic_ctor_cxx11.cpp @@ -317,7 +316,6 @@ class Matrix */ EIGEN_DEVICE_FUNC explicit EIGEN_STRONG_INLINE Matrix(const std::initializer_list>& list) : Base(list) {} -#endif // end EIGEN_HAS_CXX11 #ifndef EIGEN_PARSED_BY_DOXYGEN @@ -505,8 +503,6 @@ EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex, cd) #undef EIGEN_MAKE_TYPEDEFS #undef EIGEN_MAKE_FIXED_TYPEDEFS -#if EIGEN_HAS_CXX11 - #define EIGEN_MAKE_TYPEDEFS(Size, SizeSuffix) \ /** \ingroup matrixtypedefs */ \ /** \brief \cpp11 */ \ @@ -552,8 +548,6 @@ using RowVector = Matrix; #undef EIGEN_MAKE_TYPEDEFS #undef EIGEN_MAKE_FIXED_TYPEDEFS -#endif // EIGEN_HAS_CXX11 - } // end namespace Eigen #endif // EIGEN_MATRIX_H diff --git a/Eigen/src/Core/PlainObjectBase.h b/Eigen/src/Core/PlainObjectBase.h index 607e1c8b3..c9b14ad7b 100644 --- a/Eigen/src/Core/PlainObjectBase.h +++ b/Eigen/src/Core/PlainObjectBase.h @@ -527,7 +527,6 @@ class PlainObjectBase : public internal::dense_xpr_base::type // EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED } - #if EIGEN_HAS_CXX11 /** \brief Construct a row of column vector with fixed size from an arbitrary number of coefficients. \cpp11 * * \only_for_vectors @@ -587,7 +586,6 @@ class PlainObjectBase : public internal::dense_xpr_base::type } } } - #endif // end EIGEN_HAS_CXX11 /** \sa PlainObjectBase::operator=(const EigenBase&) */ template diff --git a/Eigen/src/Core/util/ConfigureVectorization.h b/Eigen/src/Core/util/ConfigureVectorization.h index dd6d45171..16ca3ef93 100644 --- a/Eigen/src/Core/util/ConfigureVectorization.h +++ b/Eigen/src/Core/util/ConfigureVectorization.h @@ -116,7 +116,6 @@ // static alignment is completely disabled with GCC 3, Sun Studio, and QCC/QNX #if !EIGEN_GCC_AND_ARCH_DOESNT_WANT_STACK_ALIGNMENT \ - && !EIGEN_GCC3_OR_OLDER \ && !EIGEN_COMP_SUNCC \ && !EIGEN_OS_QNX #define EIGEN_ARCH_WANTS_STACK_ALIGNMENT 1 diff --git a/Eigen/src/Core/util/IntegralConstant.h b/Eigen/src/Core/util/IntegralConstant.h index ddcd3709e..0a9990c0a 100644 --- a/Eigen/src/Core/util/IntegralConstant.h +++ b/Eigen/src/Core/util/IntegralConstant.h @@ -88,9 +88,7 @@ public: FixedInt ( FixedInt (*)() ) {} #endif -#if EIGEN_HAS_CXX11 FixedInt(std::integral_constant) {} -#endif }; /** \internal @@ -178,9 +176,7 @@ template struct cleanup_index_type // If VariableAndFixedInt matches DynamicKey, then we turn it to a pure runtime-value (aka Index): template struct cleanup_index_type, DynamicKey> { typedef Index type; }; -#if EIGEN_HAS_CXX11 template struct cleanup_index_type, DynamicKey> { typedef FixedInt type; }; -#endif } // end namespace internal diff --git a/Eigen/src/Core/util/Macros.h b/Eigen/src/Core/util/Macros.h index 81c7647aa..0ff766903 100644 --- a/Eigen/src/Core/util/Macros.h +++ b/Eigen/src/Core/util/Macros.h @@ -10,7 +10,6 @@ #ifndef EIGEN_MACROS_H #define EIGEN_MACROS_H - #include "../InternalHeaderCheck.h" //------------------------------------------------------------------------------------------ @@ -214,14 +213,6 @@ #define EIGEN_GNUC_AT(x,y) 0 #endif -// FIXME: could probably be removed as we do not support gcc 3.x anymore -#if EIGEN_COMP_GNUC && (__GNUC__ <= 3) -#define EIGEN_GCC3_OR_OLDER 1 -#else -#define EIGEN_GCC3_OR_OLDER 0 -#endif - - //------------------------------------------------------------------------------------------ // Architecture identification, EIGEN_ARCH_* @@ -577,13 +568,6 @@ // Detect Compiler/Architecture/OS specific features //------------------------------------------------------------------------------------------ -#if EIGEN_GNUC_AT_MOST(4,3) && !EIGEN_COMP_CLANG - // see bug 89 - #define EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO 0 -#else - #define EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO 1 -#endif - // Cross compiler wrapper around LLVM's __has_builtin #ifdef __has_builtin # define EIGEN_HAS_BUILTIN(x) __has_builtin(x) @@ -652,11 +636,10 @@ // but in practice we should not rely on them but rather on the availability of // individual features as defined later. // This is why there is no EIGEN_HAS_CXX17. -// FIXME: get rid of EIGEN_HAS_CXX14 and maybe even EIGEN_HAS_CXX11. +// FIXME: get rid of EIGEN_HAS_CXX14. #if EIGEN_MAX_CPP_VER>=11 && EIGEN_COMP_CXXVER>=11 -#define EIGEN_HAS_CXX11 1 #else -#define EIGEN_HAS_CXX11 0 +#error This compiler appears to be too old to be supported by Eigen #endif #if EIGEN_MAX_CPP_VER>=14 && EIGEN_COMP_CXXVER>=14 @@ -694,7 +677,7 @@ // Does the compiler support result_of? // result_of was deprecated in c++17 and removed in c++ 20 #ifndef EIGEN_HAS_STD_RESULT_OF -#if EIGEN_HAS_CXX11 && EIGEN_COMP_CXXVER < 17 +#if EIGEN_COMP_CXXVER < 17 #define EIGEN_HAS_STD_RESULT_OF 1 #else #define EIGEN_HAS_STD_RESULT_OF 0 @@ -705,7 +688,7 @@ #ifndef EIGEN_HAS_STD_HASH // The std::hash struct is defined in C++11 but is not labelled as a __device__ // function and is not constexpr, so cannot be used on device. -#if EIGEN_HAS_CXX11 && !defined(EIGEN_GPU_COMPILE_PHASE) +#if !defined(EIGEN_GPU_COMPILE_PHASE) #define EIGEN_HAS_STD_HASH 1 #else #define EIGEN_HAS_STD_HASH 0 @@ -721,7 +704,7 @@ #endif #ifndef EIGEN_HAS_ALIGNAS -#if EIGEN_MAX_CPP_VER>=11 && EIGEN_HAS_CXX11 && \ +#if EIGEN_MAX_CPP_VER>=11 && \ ( __has_feature(cxx_alignas) \ || EIGEN_HAS_CXX14 \ || (EIGEN_COMP_MSVC >= 1800) \ @@ -740,7 +723,7 @@ // - full support of type traits was added only to GCC 5.1.0. // - 20150626 corresponds to the last release of 4.x libstdc++ #ifndef EIGEN_HAS_TYPE_TRAITS -#if EIGEN_MAX_CPP_VER>=11 && (EIGEN_HAS_CXX11 || EIGEN_COMP_MSVC >= 1700) \ +#if EIGEN_MAX_CPP_VER>=11 \ && ((!EIGEN_COMP_GNUC_STRICT) || EIGEN_GNUC_AT_LEAST(5, 1)) \ && ((!defined(__GLIBCXX__)) || __GLIBCXX__ > 20150626) #define EIGEN_HAS_TYPE_TRAITS 1 @@ -1000,38 +983,12 @@ #define eigen_plain_assert(x) #endif #else - #if EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO namespace Eigen { namespace internal { inline bool copy_bool(bool b) { return b; } } } #define eigen_plain_assert(x) assert(x) - #else - // work around bug 89 - #include // for abort - #include // for std::cerr - - namespace Eigen { - namespace internal { - // trivial function copying a bool. Must be EIGEN_DONT_INLINE, so we implement it after including Eigen headers. - // see bug 89. - namespace { - EIGEN_DONT_INLINE bool copy_bool(bool b) { return b; } - } - inline void assert_fail(const char *condition, const char *function, const char *file, int line) - { - std::cerr << "assertion failed: " << condition << " in function " << function << " at " << file << ":" << line << std::endl; - abort(); - } - } - } - #define eigen_plain_assert(x) \ - do { \ - if(!Eigen::internal::copy_bool(x)) \ - Eigen::internal::assert_fail(EIGEN_MAKESTRING(x), __PRETTY_FUNCTION__, __FILE__, __LINE__); \ - } while(false) - #endif #endif // eigen_assert can be overridden @@ -1226,11 +1183,7 @@ namespace Eigen { * \brief Macro to explicitly define the default copy constructor. * This is necessary, because the implicit definition is deprecated if the copy-assignment is overridden. */ -#if EIGEN_HAS_CXX11 #define EIGEN_DEFAULT_COPY_CONSTRUCTOR(CLASS) EIGEN_DEVICE_FUNC CLASS(const CLASS&) = default; -#else -#define EIGEN_DEFAULT_COPY_CONSTRUCTOR(CLASS) -#endif @@ -1250,15 +1203,9 @@ namespace Eigen { * * Hiding the default destructor lead to problems in C++03 mode together with boost::multiprecision */ -#if EIGEN_HAS_CXX11 #define EIGEN_DEFAULT_EMPTY_CONSTRUCTOR_AND_DESTRUCTOR(Derived) \ EIGEN_DEVICE_FUNC Derived() = default; \ EIGEN_DEVICE_FUNC ~Derived() = default; -#else -#define EIGEN_DEFAULT_EMPTY_CONSTRUCTOR_AND_DESTRUCTOR(Derived) \ - EIGEN_DEVICE_FUNC Derived() {}; \ - /* EIGEN_DEVICE_FUNC ~Derived() {}; */ -#endif diff --git a/Eigen/src/Core/util/Meta.h b/Eigen/src/Core/util/Meta.h index 26a6ea482..08267d7be 100755 --- a/Eigen/src/Core/util/Meta.h +++ b/Eigen/src/Core/util/Meta.h @@ -31,7 +31,6 @@ #define EIGEN_ICC_NEEDS_CSTDINT (EIGEN_COMP_ICC>=1600 && EIGEN_COMP_CXXVER >= 11) // Define portable (u)int{32,64} types -#if EIGEN_HAS_CXX11 || EIGEN_ICC_NEEDS_CSTDINT #include namespace Eigen { @@ -46,24 +45,6 @@ typedef std::uint64_t uint64_t; typedef std::int64_t int64_t; } } -#else -// Without c++11, all compilers able to compile Eigen also -// provide the C99 stdint.h header file. -#include - -namespace Eigen { -namespace numext { -typedef ::uint8_t uint8_t; -typedef ::int8_t int8_t; -typedef ::uint16_t uint16_t; -typedef ::int16_t int16_t; -typedef ::uint32_t uint32_t; -typedef ::int32_t int32_t; -typedef ::uint64_t uint64_t; -typedef ::int64_t int64_t; -} -} -#endif namespace Eigen { @@ -155,59 +136,11 @@ template struct is_same { enum { value = 1 }; }; template< class T > struct is_void : is_same::type> {}; -#if EIGEN_HAS_CXX11 template<> struct is_arithmetic { enum { value = true }; }; template<> struct is_arithmetic { enum { value = true }; }; using std::is_integral; -#else -template struct is_integral { enum { value = false }; }; -template<> struct is_integral { enum { value = true }; }; -template<> struct is_integral { enum { value = true }; }; -template<> struct is_integral { enum { value = true }; }; -template<> struct is_integral { enum { value = true }; }; -template<> struct is_integral { enum { value = true }; }; -template<> struct is_integral { enum { value = true }; }; -template<> struct is_integral { enum { value = true }; }; -template<> struct is_integral { enum { value = true }; }; -template<> struct is_integral { enum { value = true }; }; -template<> struct is_integral { enum { value = true }; }; -#if EIGEN_COMP_MSVC -template<> struct is_integral { enum { value = true }; }; -template<> struct is_integral { enum { value = true }; }; -#endif -#endif -#if EIGEN_HAS_CXX11 using std::make_unsigned; -#else -// TODO: Possibly improve this implementation of make_unsigned. -// It is currently used only by -// template struct random_default_impl. -template struct make_unsigned; -template<> struct make_unsigned { typedef unsigned char type; }; -template<> struct make_unsigned { typedef unsigned char type; }; -template<> struct make_unsigned { typedef unsigned char type; }; -template<> struct make_unsigned { typedef unsigned short type; }; -template<> struct make_unsigned { typedef unsigned short type; }; -template<> struct make_unsigned { typedef unsigned int type; }; -template<> struct make_unsigned { typedef unsigned int type; }; -template<> struct make_unsigned { typedef unsigned long type; }; -template<> struct make_unsigned { typedef unsigned long type; }; -#if EIGEN_COMP_MSVC -template<> struct make_unsigned { typedef unsigned __int64 type; }; -template<> struct make_unsigned { typedef unsigned __int64 type; }; -#endif - -// Some platforms define int64_t as `long long` even for C++03, where -// `long long` is not guaranteed by the standard. In this case we are missing -// the definition for make_unsigned. If we just define it, we run into issues -// where `long long` doesn't exist in some compilers for C++03. We therefore add -// the specialization for these platforms only. -#if EIGEN_OS_MAC || EIGEN_COMP_MINGW -template<> struct make_unsigned { typedef unsigned long long type; }; -template<> struct make_unsigned { typedef unsigned long long type; }; -#endif -#endif template struct add_const { typedef const T type; }; template struct add_const { typedef T& type; }; @@ -221,56 +154,8 @@ template struct add_const_on_value_type { typedef T const template struct add_const_on_value_type { typedef T const* const type; }; template struct add_const_on_value_type { typedef T const* const type; }; -#if EIGEN_HAS_CXX11 - using std::is_convertible; -#else - -template -struct is_convertible_impl -{ -private: - struct any_conversion - { - template any_conversion(const volatile T&); - template any_conversion(T&); - }; - struct yes {int a[1];}; - struct no {int a[2];}; - - template - static yes test(T, int); - - template - static no test(any_conversion, ...); - -public: - static typename internal::remove_reference::type* ms_from; -#ifdef __INTEL_COMPILER - #pragma warning push - #pragma warning ( disable : 2259 ) -#endif - enum { value = sizeof(test(*ms_from, 0))==sizeof(yes) }; -#ifdef __INTEL_COMPILER - #pragma warning pop -#endif -}; - -template -struct is_convertible -{ - enum { value = is_convertible_impl::value }; -}; - -template -struct is_convertible { enum { value = false }; }; - -template -struct is_convertible { enum { value = true }; }; - -#endif - /** \internal Allows to enable/disable an overload * according to a compile time condition. */ @@ -279,147 +164,6 @@ template struct enable_if; template struct enable_if { typedef T type; }; -#if defined(EIGEN_GPU_COMPILE_PHASE) && !EIGEN_HAS_CXX11 -#if !defined(__FLT_EPSILON__) -#define __FLT_EPSILON__ FLT_EPSILON -#define __DBL_EPSILON__ DBL_EPSILON -#endif - -namespace device { - -template struct numeric_limits -{ - EIGEN_DEVICE_FUNC - static EIGEN_CONSTEXPR T epsilon() { return 0; } - static T (max)() { assert(false && "Highest not supported for this type"); } - static T (min)() { assert(false && "Lowest not supported for this type"); } - static T infinity() { assert(false && "Infinity not supported for this type"); } - static T quiet_NaN() { assert(false && "quiet_NaN not supported for this type"); } -}; -template<> struct numeric_limits -{ - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static float epsilon() { return __FLT_EPSILON__; } - EIGEN_DEVICE_FUNC - static float (max)() { - #if defined(EIGEN_CUDA_ARCH) - return CUDART_MAX_NORMAL_F; - #else - return HIPRT_MAX_NORMAL_F; - #endif - } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static float (min)() { return FLT_MIN; } - EIGEN_DEVICE_FUNC - static float infinity() { - #if defined(EIGEN_CUDA_ARCH) - return CUDART_INF_F; - #else - return HIPRT_INF_F; - #endif - } - EIGEN_DEVICE_FUNC - static float quiet_NaN() { - #if defined(EIGEN_CUDA_ARCH) - return CUDART_NAN_F; - #else - return HIPRT_NAN_F; - #endif - } -}; -template<> struct numeric_limits -{ - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static double epsilon() { return __DBL_EPSILON__; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static double (max)() { return DBL_MAX; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static double (min)() { return DBL_MIN; } - EIGEN_DEVICE_FUNC - static double infinity() { - #if defined(EIGEN_CUDA_ARCH) - return CUDART_INF; - #else - return HIPRT_INF; - #endif - } - EIGEN_DEVICE_FUNC - static double quiet_NaN() { - #if defined(EIGEN_CUDA_ARCH) - return CUDART_NAN; - #else - return HIPRT_NAN; - #endif - } -}; -template<> struct numeric_limits -{ - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static int epsilon() { return 0; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static int (max)() { return INT_MAX; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static int (min)() { return INT_MIN; } -}; -template<> struct numeric_limits -{ - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static unsigned int epsilon() { return 0; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static unsigned int (max)() { return UINT_MAX; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static unsigned int (min)() { return 0; } -}; -template<> struct numeric_limits -{ - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static long epsilon() { return 0; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static long (max)() { return LONG_MAX; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static long (min)() { return LONG_MIN; } -}; -template<> struct numeric_limits -{ - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static unsigned long epsilon() { return 0; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static unsigned long (max)() { return ULONG_MAX; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static unsigned long (min)() { return 0; } -}; -template<> struct numeric_limits -{ - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static long long epsilon() { return 0; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static long long (max)() { return LLONG_MAX; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static long long (min)() { return LLONG_MIN; } -}; -template<> struct numeric_limits -{ - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static unsigned long long epsilon() { return 0; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static unsigned long long (max)() { return ULLONG_MAX; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static unsigned long long (min)() { return 0; } -}; -template<> struct numeric_limits -{ - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static bool epsilon() { return false; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static bool (max)() { return true; } - EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR - static bool (min)() { return false; } -}; - -} - -#endif // defined(EIGEN_GPU_COMPILE_PHASE) && !EIGEN_HAS_CXX11 - /** \internal * A base class do disable default copy ctor and copy assignment operator. */ @@ -461,14 +205,12 @@ template struct array_size { enum { value = N }; }; -#if EIGEN_HAS_CXX11 template struct array_size > { enum { value = N }; }; template struct array_size > { enum { value = N }; }; -#endif /** \internal * Analogue of the std::size free function. @@ -620,36 +362,12 @@ struct invoke_result { typedef typename std::invoke_result::type type1; typedef typename remove_all::type type; }; -#elif EIGEN_HAS_CXX11 +#else template struct invoke_result { typedef typename result_of::type type1; typedef typename remove_all::type type; }; -#else -template -struct invoke_result { - typedef typename result_of::type type1; - typedef typename remove_all::type type; -}; - -template -struct invoke_result { - typedef typename result_of::type type1; - typedef typename remove_all::type type; -}; - -template -struct invoke_result { - typedef typename result_of::type type1; - typedef typename remove_all::type type; -}; - -template -struct invoke_result { - typedef typename result_of::type type1; - typedef typename remove_all::type type; -}; #endif // C++14 integer/index_sequence. @@ -824,11 +542,7 @@ template EIGEN_DEVICE_FUNC void swap(T &a, T &b) { T tmp = b; b = template EIGEN_STRONG_INLINE void swap(T &a, T &b) { std::swap(a,b); } #endif -#if defined(EIGEN_GPU_COMPILE_PHASE) && !EIGEN_HAS_CXX11 -using internal::device::numeric_limits; -#else using std::numeric_limits; -#endif // Integer division with rounding up. // T is assumed to be an integer type with a>=0, and b>0 diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index bc1e03c40..7b1d77053 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -1600,7 +1600,6 @@ PREDEFINED = EIGEN_EMPTY_STRUCT \ EIGEN_QT_SUPPORT \ EIGEN_STRONG_INLINE=inline \ EIGEN_DEVICE_FUNC= \ - EIGEN_HAS_CXX11=1 \ EIGEN_HAS_CXX11_MATH=1 \ "EIGEN_MAKE_CWISE_BINARY_OP(METHOD,FUNCTOR)=template const CwiseBinaryOp, const Derived, const OtherDerived> METHOD(const EIGEN_CURRENT_STORAGE_BASE_CLASS &other) const;" \ "EIGEN_CWISE_PRODUCT_RETURN_TYPE(LHS,RHS)=CwiseBinaryOp, const LHS, const RHS>"\ diff --git a/test/AnnoyingScalar.h b/test/AnnoyingScalar.h index 7ace083c5..d4cca7963 100644 --- a/test/AnnoyingScalar.h +++ b/test/AnnoyingScalar.h @@ -37,9 +37,7 @@ class AnnoyingScalar AnnoyingScalar(float _v) { init(); *v = _v; } AnnoyingScalar(int _v) { init(); *v = _v; } AnnoyingScalar(long _v) { init(); *v = _v; } - #if EIGEN_HAS_CXX11 AnnoyingScalar(long long _v) { init(); *v = _v; } - #endif AnnoyingScalar(const AnnoyingScalar& other) { init(); *v = *(other.v); } ~AnnoyingScalar() { if(v!=&data) diff --git a/test/array_cwise.cpp b/test/array_cwise.cpp index 0cc438b39..748514001 100644 --- a/test/array_cwise.cpp +++ b/test/array_cwise.cpp @@ -176,7 +176,6 @@ template void array(const ArrayType& m) FixedArrayType f4(f1.data()); VERIFY_IS_APPROX(f4, f1); } - #if EIGEN_HAS_CXX11 { FixedArrayType f1{s1}; VERIFY_IS_APPROX(f1, FixedArrayType::Constant(s1)); @@ -188,7 +187,6 @@ template void array(const ArrayType& m) FixedArrayType f4{f1.data()}; VERIFY_IS_APPROX(f4, f1); } - #endif // pow VERIFY_IS_APPROX(m1.pow(2), m1.square()); @@ -214,14 +212,12 @@ template void array(const ArrayType& m) OneDArrayType o2(static_cast(rows)); VERIFY(o2.size()==rows); } - #if EIGEN_HAS_CXX11 { OneDArrayType o1{rows}; VERIFY(o1.size()==rows); OneDArrayType o4{int(rows)}; VERIFY(o4.size()==rows); } - #endif // Check possible conflicts with 2D ctor typedef Array TwoDArrayType; typedef Array ArrayType2; @@ -238,7 +234,6 @@ template void array(const ArrayType& m) ArrayType2 o4(static_cast(rows),static_cast(cols)); VERIFY(o4(0)==Scalar(rows) && o4(1)==Scalar(cols)); } - #if EIGEN_HAS_CXX11 { TwoDArrayType o1{rows,cols}; VERIFY(o1.rows()==rows); @@ -252,7 +247,6 @@ template void array(const ArrayType& m) ArrayType2 o4{int(rows),int(cols)}; VERIFY(o4(0)==Scalar(rows) && o4(1)==Scalar(cols)); } - #endif } template void comparisons(const ArrayType& m) diff --git a/test/basicstuff.cpp b/test/basicstuff.cpp index 00ef96ac1..14ecb7298 100644 --- a/test/basicstuff.cpp +++ b/test/basicstuff.cpp @@ -69,10 +69,8 @@ template void basicStuff(const MatrixType& m) x = v1(static_cast(r1)); x = v1(static_cast(r1)); x = v1(static_cast(r1)); -#if EIGEN_HAS_CXX11 x = v1(static_cast(r1)); x = v1(static_cast(r1)); -#endif VERIFY_IS_APPROX( v1, v1); VERIFY_IS_NOT_APPROX( v1, 2*v1); @@ -231,10 +229,8 @@ struct casting_test_runner { casting_test::run(); casting_test::run(); casting_test::run(); -#if EIGEN_HAS_CXX11 casting_test::run(); casting_test::run(); -#endif casting_test::run(); casting_test::run(); casting_test::run(); @@ -264,10 +260,8 @@ void casting_all() { casting_test_runner::run(); casting_test_runner::run(); casting_test_runner::run(); -#if EIGEN_HAS_CXX11 casting_test_runner::run(); casting_test_runner::run(); -#endif casting_test_runner::run(); casting_test_runner::run(); casting_test_runner::run(); diff --git a/test/blasutil.cpp b/test/blasutil.cpp index 845a498d6..ee98df47a 100644 --- a/test/blasutil.cpp +++ b/test/blasutil.cpp @@ -196,12 +196,7 @@ EIGEN_DECLARE_TEST(blasutil) // TODO: Replace this by a call to numext::int64_t as soon as we have a way to // detect the typedef for int64_t on all platforms -#if EIGEN_HAS_CXX11 CALL_SUBTEST_4(run_test()); -#else - CALL_SUBTEST_4(run_test()); -#endif - CALL_SUBTEST_5(run_test()); CALL_SUBTEST_6(run_test()); CALL_SUBTEST_7(run_test >()); diff --git a/test/dense_storage.cpp b/test/dense_storage.cpp index 45c2bd728..826874c30 100644 --- a/test/dense_storage.cpp +++ b/test/dense_storage.cpp @@ -13,7 +13,7 @@ #include -#if EIGEN_HAS_TYPE_TRAITS && EIGEN_HAS_CXX11 +#if EIGEN_HAS_TYPE_TRAITS using DenseStorageD3x3 = Eigen::DenseStorage; static_assert(std::is_trivially_move_constructible::value, "DenseStorage not trivially_move_constructible"); static_assert(std::is_trivially_move_assignable::value, "DenseStorage not trivially_move_assignable"); diff --git a/test/indexed_view.cpp b/test/indexed_view.cpp index 04ba91a82..b9a7acca9 100644 --- a/test/indexed_view.cpp +++ b/test/indexed_view.cpp @@ -12,26 +12,6 @@ #define EIGEN_MAX_CPP_VER 11 #endif -#ifdef EIGEN_TEST_PART_3 -// Make sure we also check c++98 max implementation -#define EIGEN_MAX_CPP_VER 03 - -// We need to disable this warning when compiling with c++11 while limiting Eigen to c++98 -// Ideally we would rather configure the compiler to build in c++98 mode but this needs -// to be done at the CMakeLists.txt level. -#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) - #pragma GCC diagnostic ignored "-Wdeprecated" -#endif - -#if defined(__GNUC__) && (__GNUC__ >=9) - #pragma GCC diagnostic ignored "-Wdeprecated-copy" -#endif -#if defined(__clang__) && (__clang_major__ >= 10) - #pragma clang diagnostic ignored "-Wdeprecated-copy" -#endif - -#endif - #include #include #include "main.h" @@ -39,11 +19,8 @@ using Eigen::placeholders::all; using Eigen::placeholders::last; using Eigen::placeholders::lastp1; - -#if EIGEN_HAS_CXX11 using Eigen::placeholders::lastN; #include -#endif typedef std::pair IndexPair; @@ -225,7 +202,6 @@ void check_indexed_view() VERIFY( is_same_seq_type( seqN(2,fix<5>(5),fix<-2>), seqN(2,fix<5>,fix<-2>()) ) ); VERIFY( is_same_seq_type( seq(2,fix<5>), seqN(2,4) ) ); - #if EIGEN_HAS_CXX11 VERIFY( is_same_seq_type( seq(fix<2>,fix<5>), seqN(fix<2>,fix<4>) ) ); VERIFY( is_same_seq( seqN(2,std::integral_constant(),std::integral_constant()), seqN(2,fix<5>,fix<-2>()) ) ); VERIFY( is_same_seq( seq(std::integral_constant(),std::integral_constant(),std::integral_constant()), @@ -236,10 +212,6 @@ void check_indexed_view() VERIFY( is_same_seq_type( seqN(2,std::integral_constant()), seqN(2,fix<5>) ) ); VERIFY( is_same_seq_type( seq(std::integral_constant(),std::integral_constant()), seq(fix<1>,fix<5>) ) ); -#else - // sorry, no compile-time size recovery in c++98/03 - VERIFY( is_same_seq( seq(fix<2>,fix<5>), seqN(fix<2>,fix<4>) ) ); -#endif VERIFY( (A(seqN(2,fix<5>), 5)).RowsAtCompileTime == 5); VERIFY( (A(4, all)).ColsAtCompileTime == Dynamic); @@ -315,7 +287,6 @@ void check_indexed_view() A(seq(last-5,last-1,2), seqN(last-3,3,fix<-2>)).reverse() ); } -#if EIGEN_HAS_CXX11 // check lastN VERIFY_IS_APPROX( a(lastN(3)), a.tail(3) ); VERIFY( MATCH( a(lastN(3)), "7\n8\n9" ) ); @@ -341,8 +312,6 @@ void check_indexed_view() VERIFY_IS_APPROX( b({3, 1, 6, 5}), b(std::array{{3, 1, 6, 5}}) ); VERIFY_IS_EQUAL( b({1,3,5}).SizeAtCompileTime, 3 ); -#endif - #endif // check mat(i,j) with weird types for i and j @@ -401,13 +370,11 @@ void check_indexed_view() a(XX) = 1; A(XX,YY) = 1; // Anonymous enums only work with C++11 -#if EIGEN_HAS_CXX11 enum { X=0, Y=1 }; a(X) = 1; A(X,Y) = 1; A(XX,Y) = 1; A(X,YY) = 1; -#endif // Check compilation of varying integer types as index types: Index i = n/2; @@ -447,13 +414,11 @@ void check_indexed_view() VERIFY( MATCH( A(all,1)(1), "101")); } -#if EIGEN_HAS_CXX11 //Bug IndexView with a single static row should be RowMajor: { // A(1, seq(0,2,1)).cwiseAbs().colwise().replicate(2).eval(); STATIC_CHECK(( (internal::evaluator::Flags & RowMajorBit) == RowMajorBit )); } -#endif } @@ -462,7 +427,6 @@ EIGEN_DECLARE_TEST(indexed_view) // for(int i = 0; i < g_repeat; i++) { CALL_SUBTEST_1( check_indexed_view() ); CALL_SUBTEST_2( check_indexed_view() ); - CALL_SUBTEST_3( check_indexed_view() ); // } // static checks of some internals: diff --git a/test/integer_types.cpp b/test/integer_types.cpp index ce64e1870..13225279f 100644 --- a/test/integer_types.cpp +++ b/test/integer_types.cpp @@ -160,12 +160,10 @@ EIGEN_DECLARE_TEST(integer_types) CALL_SUBTEST_6( integer_type_tests(Matrix()) ); -#if EIGEN_HAS_CXX11 CALL_SUBTEST_7( integer_type_tests(Matrix()) ); CALL_SUBTEST_7( signed_integer_type_tests(Matrix()) ); CALL_SUBTEST_8( integer_type_tests(Matrix(1, 5)) ); -#endif } CALL_SUBTEST_9( integer_types_extra<0>() ); } diff --git a/test/main.h b/test/main.h index 9b2938ad7..041233d1d 100644 --- a/test/main.h +++ b/test/main.h @@ -433,10 +433,8 @@ EIGEN_TEST_SCALAR_TEST_OVERLOAD(int) EIGEN_TEST_SCALAR_TEST_OVERLOAD(unsigned int) EIGEN_TEST_SCALAR_TEST_OVERLOAD(long) EIGEN_TEST_SCALAR_TEST_OVERLOAD(unsigned long) -#if EIGEN_HAS_CXX11 EIGEN_TEST_SCALAR_TEST_OVERLOAD(long long) EIGEN_TEST_SCALAR_TEST_OVERLOAD(unsigned long long) -#endif EIGEN_TEST_SCALAR_TEST_OVERLOAD(float) EIGEN_TEST_SCALAR_TEST_OVERLOAD(double) EIGEN_TEST_SCALAR_TEST_OVERLOAD(half) diff --git a/test/num_dimensions.cpp b/test/num_dimensions.cpp index 7ad7ef697..528c8f6f6 100644 --- a/test/num_dimensions.cpp +++ b/test/num_dimensions.cpp @@ -15,7 +15,6 @@ void check_dim(const Xpr& ) { STATIC_CHECK( Xpr::NumDimensions == ExpectedDim ); } -#if EIGEN_HAS_CXX11 template