diff options
author | Hauke Heibel <hauke.heibel@gmail.com> | 2010-04-21 18:21:46 +0200 |
---|---|---|
committer | Hauke Heibel <hauke.heibel@gmail.com> | 2010-04-21 18:21:46 +0200 |
commit | 2db538748847b230ff33cfa7f77426400b9b4811 (patch) | |
tree | 123458a2f26b00312684346b47e3ac9c662339a4 | |
parent | 028bb7ea48c6adeb4599947341e4b5363c0f3bdd (diff) |
Fixed two bad errors on std::vector.
First, MSVC 2010 does not ship a 'fixed'/'adapted' STL.
Second, only under very rare cases we do not even need the aligned_allocator.
-rw-r--r-- | Eigen/StdList | 4 | ||||
-rw-r--r-- | Eigen/StdVector | 4 | ||||
-rw-r--r-- | Eigen/src/StlSupport/StdList.h | 7 | ||||
-rw-r--r-- | Eigen/src/StlSupport/StdVector.h | 18 |
4 files changed, 19 insertions, 14 deletions
diff --git a/Eigen/StdList b/Eigen/StdList index a6737593e..d914ded4f 100644 --- a/Eigen/StdList +++ b/Eigen/StdList @@ -28,9 +28,7 @@ #include "Core" #include <list> -#if (defined(_MSC_VER) && defined(_WIN64)) || /* MSVC auto aligns in 64 bit builds */ \ - (defined(_MSC_VER) && _MSC_VER >= 1600) || /* MSVC 2010 ships alignment compatible STL libs */ \ - (defined(_GLIBCXX_VECTOR) && (!EIGEN_GNUC_AT_LEAST(4,1))) /* Note that before gcc-4.1 we already have: std::vector::resize(size_type,const T&). */ +#if (defined(_MSC_VER) && defined(_WIN64)) /* MSVC auto aligns in 64 bit builds */ #define EIGEN_DEFINE_STL_LIST_SPECIALIZATION(...) diff --git a/Eigen/StdVector b/Eigen/StdVector index e102b5fc1..f780a1633 100644 --- a/Eigen/StdVector +++ b/Eigen/StdVector @@ -29,9 +29,7 @@ #include "Core" #include <vector> -#if (defined(_MSC_VER) && defined(_WIN64)) || /* MSVC auto aligns in 64 bit builds */ \ - (defined(_MSC_VER) && _MSC_VER >= 1600) || /* MSVC 2010 ships alignment compatible STL libs */ \ - (defined(_GLIBCXX_VECTOR) && (!EIGEN_GNUC_AT_LEAST(4,1))) /* Note that before gcc-4.1 we already have: std::vector::resize(size_type,const T&). */ +#if (defined(_MSC_VER) && defined(_WIN64)) /* MSVC auto aligns in 64 bit builds */ #define EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(...) diff --git a/Eigen/src/StlSupport/StdList.h b/Eigen/src/StlSupport/StdList.h index 43af4f0f8..55b90066e 100644 --- a/Eigen/src/StlSupport/StdList.h +++ b/Eigen/src/StlSupport/StdList.h @@ -66,6 +66,9 @@ namespace std \ }; \ } +// check whether we really need the std::vector 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&). */ + namespace std { @@ -91,7 +94,7 @@ namespace std template<typename T> class list<T,Eigen::aligned_allocator<T> > : public list<EIGEN_WORKAROUND_MSVC_STL_SUPPORT(T), - Eigen::aligned_allocator_indirection<EIGEN_WORKAROUND_MSVC_STL_SUPPORT(T)> > + Eigen::aligned_allocator_indirection<EIGEN_WORKAROUND_MSVC_STL_SUPPORT(T)> > { typedef list<EIGEN_WORKAROUND_MSVC_STL_SUPPORT(T), Eigen::aligned_allocator_indirection<EIGEN_WORKAROUND_MSVC_STL_SUPPORT(T)> > list_base; @@ -121,4 +124,6 @@ namespace std }; } +#endif // check whether specialization is actually required + #endif // EIGEN_STDLIST_H diff --git a/Eigen/src/StlSupport/StdVector.h b/Eigen/src/StlSupport/StdVector.h index f3d268c9b..8526d29e0 100644 --- a/Eigen/src/StlSupport/StdVector.h +++ b/Eigen/src/StlSupport/StdVector.h @@ -67,6 +67,9 @@ namespace std \ }; \ } +// check whether we really need the std::vector specialization +#if !(defined(_GLIBCXX_VECTOR) && (!EIGEN_GNUC_AT_LEAST(4,1))) /* Note that before gcc-4.1 we already have: std::vector::resize(size_type,const T&). */ + namespace std { #define EIGEN_STD_VECTOR_SPECIALIZATION_BODY \ @@ -88,10 +91,10 @@ namespace std { return *this; \ } -template<typename T> -class vector<T,Eigen::aligned_allocator<T> > - : public vector<EIGEN_WORKAROUND_MSVC_STL_SUPPORT(T), - Eigen::aligned_allocator_indirection<EIGEN_WORKAROUND_MSVC_STL_SUPPORT(T)> > + template<typename T> + class vector<T,Eigen::aligned_allocator<T> > + : public vector<EIGEN_WORKAROUND_MSVC_STL_SUPPORT(T), + Eigen::aligned_allocator_indirection<EIGEN_WORKAROUND_MSVC_STL_SUPPORT(T)> > { typedef vector<EIGEN_WORKAROUND_MSVC_STL_SUPPORT(T), Eigen::aligned_allocator_indirection<EIGEN_WORKAROUND_MSVC_STL_SUPPORT(T)> > vector_base; @@ -101,6 +104,7 @@ class vector<T,Eigen::aligned_allocator<T> > { resize(new_size, T()); } #if defined(_VECTOR_) + #pragma message("old method") // workaround MSVC std::vector implementation void resize(size_type new_size, const value_type& x) { @@ -136,9 +140,9 @@ class vector<T,Eigen::aligned_allocator<T> > vector_base::insert(vector_base::end(), new_size - vector_base::size(), x); } #endif - -}; - + }; } +#endif // check whether specialization is actually required + #endif // EIGEN_STDVECTOR_H |