aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Hauke Heibel <hauke.heibel@gmail.com>2010-04-21 18:21:46 +0200
committerGravatar Hauke Heibel <hauke.heibel@gmail.com>2010-04-21 18:21:46 +0200
commit2db538748847b230ff33cfa7f77426400b9b4811 (patch)
tree123458a2f26b00312684346b47e3ac9c662339a4
parent028bb7ea48c6adeb4599947341e4b5363c0f3bdd (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/StdList4
-rw-r--r--Eigen/StdVector4
-rw-r--r--Eigen/src/StlSupport/StdList.h7
-rw-r--r--Eigen/src/StlSupport/StdVector.h18
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