martinus/unordered_dense

Does not compile on gcc 8.3 with no-rtti (pmr)

Opened this issue · 0 comments

For crosscompiling, we rely on older compiler versions.

Because of pmr (we do not do anything with pmr), compilation fails.

Does it require pmr internally, or only if the user uses it? Maybe it could "just" be disabled completely? I think pmr is not a great dependency to have: while compilers support C++17 for a long time, pmr only came with gcc 9. And relying on "experimental" API (pre gcc 9) does not make one very comfortable, either.

In file included from ../../../../../../../objectbox/src/main/cpp/external/unordered-dense/unordered_dense.h:107,
                 from ...
/opt/aarch64-linux-gnu/aarch64-linux-gnu/include/c++/8.3.0/experimental/memory_resource: In instantiation of 'bool std::experimental::fundamentals_v2::pmr::__resource_adaptor_imp<_Alloc>::do_is_equal(const std::experimental::fundamentals_v2::pmr::memory_resource&) const [with _Alloc = std::allocator<char>]':
/opt/aarch64-linux-gnu/aarch64-linux-gnu/include/c++/8.3.0/experimental/memory_resource:320:7:   required from here
/opt/aarch64-linux-gnu/aarch64-linux-gnu/include/c++/8.3.0/experimental/memory_resource:322:13: error: 'dynamic_cast' not permitted with -fno-rtti
  auto __p = dynamic_cast<const __resource_adaptor_imp*>(&__other);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gmake[3]: *** [src/CMakeFiles/something.dir/hnsw/HnswTypes.cpp.o] Error 1
gmake[3]: *** Waiting for unfinisgmake[3]: *** [src/CMakeFiles/something.dir/hnsw/HnswTypes.cpp.o] Error 1
hed jobs....
In file included from ../../../../../../../external/unordered-dense/unordered_dense.h:107,
                 from ...

/opt/aarch64-linux-gnu/aarch64-linux-gnu/include/c++/8.3.0/experimental/memory_resource: In instantiation of 'bool std::experimental::fundamentals_v2::pmr::__resource_adaptor_imp<_Alloc>::do_is_equal(const std::experimental::fundamentals_v2::pmr::memory_resource&) const [with _Alloc = std::allocator<char>]':
/opt/aarch64-linux-gnu/aarch64-linux-gnu/include/c++/8.3.0/experimental/memory_resource:320:7:   required from here
/opt/aarch64-linux-gnu/aarch64-linux-gnu/include/c++/8.3.0/experimental/memory_resource:322:13: error: 'dynamic_cast' not permitted with -fno-rtti
  auto __p = dynamic_cast<const __resource_adaptor_imp*>(&__other);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~