|Re: [eigen] Std Vector again|
[ Thread Index |
| More lists.tuxfamily.org/eigen Archives
On Fri, 2009-06-26 at 14:55 +0200, Benoit Jacob wrote:
> Whence the StdVector header. In Eigen 2.0.3, it
> takes care of specifying the allocator for you. (Not in the
> development branch though).
Pardon my ignorance, I haven't been able to follow the mailing list as
closely as I would have liked to recently... What's the current state of
affairs in the development branch?
Keir raises a point that is also important to me: Does the current approach
play nice with templated types that go into a std::vector?
> > Then I tried switching to using the eigen specialization in Eigen/StdVector.
> > That ended up being worse, because suddenly my header files had to be
> > included in a certain order, or there would be mysterious runtime breakage.
> The only requirement should be: include <Eigen/StdVector> before
> including <vector>. Actually, <Eigen/StdVector> takes care of
> including <vector> for you. all you have to do is replace <vector> by
I'm afraid it's not that simple. First of all, as a library author, I
don't have control over how users of my code include my headers.
Secondly, even if you could somehow ensure that <Eigen/StdVector> is
always included first code that declares std::vector in an STL
compatible way still triggers errors like the following:
In file included from /usr/include/boost/functional/hash/hash.hpp:16,
redeclared with 2 template parameter(s)
/usr/include/eigen2/Eigen/StdVector:88: note: previous declaration
‘template<class T, class AllocT, bool HasAlignedNew> class std::vector’
used 3 template parameter(s)
The offending code is:
// gcc 3.4 and greater
template <class T, class Allocator> class vector;
> This flaw is being addressed in C++0x by the way.
Let's be realistic here. It's clearly going to be C++1x, and it will
probably take another few years until implementations are ready for
> > What about having an Eigen::vector<> class?
I'd like to second that request. Having a standard (as in "standard for
code that uses eigen2") vector replacement which uses std::vector
internally but doesn't require any workarounds would be a huge
improvement over the current situation IMO.
On a related note, EIGEN_DONT_VECTORIZE didn't work for me with 2.0.1
but appears to work with 2.0.3 (although I can't be sure that isn't due
to other changes in my code).