/usr/include/c++/v1/map:837:5: error: static_assert failed "Allocator::value_type must be same type as value_type"

Dimitry Andric dim at FreeBSD.org
Wed Jun 15 09:54:40 UTC 2016


On 15 Jun 2016, at 03:40, Otacílio <otacilio.neto at bsd.com.br> wrote:
> 
> Em 14/06/2016 18:14, Dimitry Andric escreveu:
>> On 14 Jun 2016, at 06:05, Otacílio <otacilio.neto at bsd.com.br> wrote:
>>> I'm getting this error when I try compile the ORB-SLAM2 library. Some one can give me a hint about it?
>>> 
>>> 
>>> /usr/include/c++/v1/map:837:5: error: static_assert failed "Allocator::value_type must be same type as value_type"
>>>    static_assert((is_same<typename allocator_type::value_type, value_type>::value),
>> Typically, this is because the allocator for std::map must use a const
>> key, and libc++ now checks for this with a static assertion.
>> 
>> See for example this fix for www/node:
>> https://svnweb.freebsd.org/ports/head/www/node/files/patch-deps_v8_src_compiler_instruction.h?view=markup&pathrev=412412
>> 
>> -Dimitry
>> 
> I think that this problem is more difficult that the example. Bellow is the error message:
> 
> In file included from /usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/src/LoopClosing.cc:21:
> In file included from /usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/include/LoopClosing.h:24:
> In file included from /usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/include/KeyFrame.h:24:
> In file included from /usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/include/MapPoint.h:25:
> In file included from /usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/include/Frame.h:27:
> In file included from /usr/local/include/DBoW2/BowVector.h:14:
> /usr/include/c++/v1/map:837:5: error: static_assert failed "Allocator::value_type must be same type as value_type"
>    static_assert((is_same<typename allocator_type::value_type, value_type>::value),
>    ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/src/LoopClosing.cc:436:21: note: in instantiation of template class 'std::__1::map<ORB_SLAM2::KeyFrame *, g2o::Sim3, std::__1::less<ORB_SLAM2::KeyFrame *>, Eigen::aligned_allocator<std::__1::pair<const ORB_SLAM2::KeyFrame *, g2o::Sim3> > >' requested here
>    KeyFrameAndPose CorrectedSim3, NonCorrectedSim3;

This patch should hopefully work.  I do not have the port itself, so I could not compile-test it.

diff --git a/include/LoopClosing.h b/include/LoopClosing.h
index b1736fe..5d80d02 100644
--- a/include/LoopClosing.h
+++ b/include/LoopClosing.h
@@ -47,7 +47,7 @@ public:

     typedef pair<set<KeyFrame*>,int> ConsistentGroup;
     typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
-        Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
+        Eigen::aligned_allocator<std::pair<KeyFrame const*, g2o::Sim3> > > KeyFrameAndPose;

 public:

-Dimitry

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 194 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20160615/dadfde90/attachment.sig>


More information about the freebsd-hackers mailing list