Re: [eigen] Eigen 3.3.0 compile error with aligned_allocator |
[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]
Hi
I am compiling PCL trunk with Eigen3.3.0 (and VS2013x64, boost 1.62.0) and get a compilation error on the intantiation of
…
typedef boost::unordered_map<int, Leaf, boost::hash<int>, std::equal_to<int>, Eigen::aligned_allocator<int> > HashMap;
…
HashMap cell_hash_map_;
E:\Develop\Libraries120_x64\boost\1.62.0-NoPython\include\ boost-1_62\boost/unordered/ detail/allocate.hpp(497) : error C2664: 'Eigen::aligned_allocator<U>:: aligned_allocator(const Eigen::aligned_allocator<U> &)' : cannot convert argument 1 from 'std::allocator<T>' to 'const Eigen::aligned_allocator<U> &'
with
[
U=boost::unordered::detail::ptr_node<std::pair<const int,pcl::GridProjection<pcl:: PointNormal>::Leaf>>
]
and
[
T=boost::unordered::detail::ptr_node<std::pair<const int,pcl::GridProjection<pcl:: PointNormal>::Leaf>>
]
and
[
U=boost::unordered::detail::ptr_node<std::pair<const int,pcl::GridProjection<pcl:: PointNormal>::Leaf>>
]
Reason: cannot convert from 'std::allocator<T>' to 'const Eigen::aligned_allocator<U>'
I googled a little bit and found
http://stackoverflow.com/questions/16126133/compiling- issue-with-custom-allocators- when-std-c0x-is-enabled
“The error message actually contains the hint. I’ve reformulated it slightly here:
error: invalid operands [of type aligned_allocator<int>] to binary _expression_ […] __x._M_get_Tp_allocator() == this->_M_get_Tp_allocator()
In other words, your allocator type needs to provide an operator ==.
This is part of the allocator requirements (§17.6.3.5, table 28). This has always been the case. But until C++11 allocators were stateless and operator == consequently always returned true, so the standard library containers probably never called the operator. This would explain why the code compiles without -std=++0x.
“
Could it be that you need some operator definitions in the aligned_allocator of eigen? The compilation error is only since eigen 3.2.9, on eigen 3.2.8 it works. The difference which causes the error is the inheritance from std::allocator of Eigen::aligned_allocator....
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |