2014-12-06 13 views
5

Próbuję skompilować ten kod w Xcode 6:Eigen :: aligned_allocator nie z std :: unordered_multimap

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

nie powiedzie się z:

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

Czy jest jeszcze konieczne stosowanie aligned_allocator w Eigen 3.2.2? Dlaczego nie działa w C++ 11/C++ 14 i libC++?

EDIT:

uzyskać no type named value_type jeśli usunąć podzielnika EIGEN z deklaracją unordered_map szablonu.

Odpowiedz

8

Uważam, że błędem jest to, że wskaźnik powinien być const, a nie pointee.
tj. spróbuj Eigen::aligned_allocator< std::pair<Frame* const, Sim3> > jako typ przydziału.

+0

Wielkie dzięki! Błąd był całkowicie mylący. To nie jest mój kod i został użyty w innych projektach, nie rozumiem, jak je skompilował? Może kompilator GNU jest mniej rygorystyczny? – aledalgrande

+1

@aledalgrande Być może libstdC++ nie "static_assert", że typ wartości alokatora musi być taki sam jak typ wartości kontenera. – Columbo

+0

Rozumiem. Wygląda na to, że Clang/libC++ nie wybacza konstrukcji C++ 11 (z mojego małego doświadczenia). – aledalgrande