2014-12-06 1 views
5

Я пытаюсь скомпилировать этот код в XCode 6:Эйген :: aligned_allocator терпит неудачу с стандом :: 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++?

EDIT:

Я получаю no type named value_type если удалить аллокатор Эйгена из декларации unordered_map шаблона.

ответ

8

Я считаю, что ошибка заключается в том, что указатель должен быть const, а не точка.
I.e. попробуйте Eigen::aligned_allocator< std::pair<Frame* const, Sim3> > как тип распределителя.

+0

Большое спасибо! Ошибка полностью вводила в заблуждение. Это не мой код, и он использовался в других проектах, не понимаю, как он скомпилирован для них? Может быть, компилятор GNU менее строг? – aledalgrande

+1

@aledalgrande Возможно, libstdC++ не является 'static_assert', что тип значения распределителя должен быть таким же, как тип значения контейнера. – Columbo

+0

Я вижу. Кажется, Clang/libC++ не прощают конструкции C++ 11 (из моего небольшого опыта). – aledalgrande

 Смежные вопросы

  • Нет связанных вопросов^_^