我正在尝试在Android上运行C ++项目。以下语句出现在一个源文件中(一个大项目的一部分)。
std::unordered_map <int,std::shared_ptr<Frame>,std::hash<int>,std::equal_to<int>,Eigen::aligned_allocator< std::pair<const int,std::shared_ptr<Frame> > > > idToKeyFrame;
NDK版本抱怨以下
sysroot/usr/include/c++/v1/unordered_map:1684:5: error: static_assert failed due to requirement 'is_same<value_type,typename allocator_type::value_type>::value' "Invalid allocator::value_type"
我无法发现声明的哪个部分不兼容。请帮助解决此错误。
更新
当我将分配器(如Marc的注释中所建议)修改为Eigen::aligned_allocator<std::pair<int,std::shared_ptr<Frame>>>
时,错误消息保持不变,但行号却发生了更改
sysroot/usr/include/c++/v1/unordered_map:854:5: error: static_assert failed due to requirement 'is_same<value_type,typename allocator_type::value_type>::value' "Invalid allocator::value_type"
更新++
根据this answer:
libstdc ++不会static_assert,libstdc ++会忽略分配器的确切类型,并将其重新绑定到容器的值类型。
和
Clang / libc ++不能原谅
又一次更新
通过注释源unordered_map
中的行,我可以解决该错误。这是目前的度假胜地(直到找到解决方案为止)。