2014-12-06 35 views
5

我試圖在XCode中6編譯這段代碼:徵:: aligned_allocator失敗的std :: unordered_multimap

std::unordered_multimap< Frame*, Sim3, std::hash<Frame*>, std::equal_to<Frame*>, Eigen::aligned_allocator< std::pair<const Frame*,Sim3> > > trackingFailed; 

它失敗:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/unordered_map:1461:5: Static_assert failed "Invalid allocator::value_type" 

是否仍有必要使用aligned_allocator在Eigen 3.2.2?爲什麼它在C++ 11/C++ 14和libC++中失敗?

編輯

我得到no type named value_type如果我從unordered_map模板聲明刪除徵分配器。

回答

8

我相信錯誤的是指針應該是const,而不是指針。
I.e.嘗試Eigen::aligned_allocator< std::pair<Frame* const, Sim3> >作爲分配器類型。

+0

非常感謝!錯誤是完全誤導。這不是我的代碼,它在其他項目中使用,不明白它是如何編譯的?也許GNU編譯器不那麼嚴格? – aledalgrande 2014-12-06 21:52:25

+1

@aledalgrande也許libstdC++不會'static_assert'分配器的值類型必須與容器的值類型相同。 – Columbo 2014-12-06 21:53:29

+0

我明白了。看來Clang/libC++不能原諒C++ 11的結構(從我的小經驗)。 – aledalgrande 2014-12-06 21:56:27

相關問題