Code Monkey home page Code Monkey logo

Comments (11)

lczech avatar lczech commented on August 26, 2024

I did some more digging. The problem is the -D_GLIBCXX_DEBUG flag, that is, the checked STL version. When removing this, compilation works. But I'd prefer to keep it.

from sparsepp.

Bu11etmagnet avatar Bu11etmagnet commented on August 26, 2024

It would be useful to know what's on line 86 of /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/debug/array.
Even more useful would be the output of the preprocessor (add -save-temps to your flags and look for a .ii file).

from sparsepp.

lczech avatar lczech commented on August 26, 2024

Line 86 is already printed in the detail listing of my post ;-)

Here is a bit more context. The problematic line is in the swap function of std::array. It seems to be the noexcept specification that is causing trouble:

void
swap(array& __other)
noexcept(noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>())))
{ std::swap_ranges(begin(), end(), __other.begin()); }

I also got the preprocessor .ii file: chunkify.ii.zip. Unpacked, it is 4MB, because of all the headers. Let me know if you want me to prepare something more light-weight instead.

from sparsepp.

greg7mdp avatar greg7mdp commented on August 26, 2024

What is the definition of your sparsepp map or set?

from sparsepp.

lczech avatar lczech commented on August 26, 2024

I'm using

spp::sparse_hash_map< typename HashFunction::DigestType, size_t >

where HashFunction::DigestType is

using DigestType = std::array< uint32_t, 5 >;

Interesting! Because of the abstraction of DigestType, I didn't see the connection between my hash key type and the array that is causing the compile error. Is this an issue with the STL implementation, after all? Or am I using sparsepp wrongly?

from sparsepp.

greg7mdp avatar greg7mdp commented on August 26, 2024

I don't think the issue is in your code. I think it may be an issue with the checked STL, but not 100% sure. Does the issue occur if you use std::unordered_map instead of spp::sparse_hash_map?

from sparsepp.

lczech avatar lczech commented on August 26, 2024

No, using a std::unordered_map compiles fine with the same debug settings.

By the way, if it helps, the only operations that I am doing with the map are:

// Init a map from hashes to chunk IDs.
using ChunkHashMap = spp::sparse_hash_map< typename HashFunction::DigestType, size_t >;
ChunkHashMap hash_to_chunk;

// Check if a hash is in there. If so, use the chunk ID. If not, add it.
auto const hash_it = hash_to_chunk.find( hash_digest );
if( hash_it != hash_to_chunk.end() ) {
    auto const chunk_id = hash_it->second;
    // ...
} else {
    // ...
    hash_to_chunk[ hash_digest ] = chunk_count;
}

(some variable declarations left out for simplicity)

The line that is causing the compile error is the last one, where a new element is added.

from sparsepp.

greg7mdp avatar greg7mdp commented on August 26, 2024

I think that the checked STL the code you quoted should have a std:: before the swap() call in the noexcept clause, otherwise it tries to call itsef swap(array& __other) which takes a single __other argument

void
swap(array& __other)
noexcept(noexcept(std::swap(std::declval<_Tp&>(), std::declval<_Tp&>())))
{ std::swap_ranges(begin(), end(), __other.begin()); }```

from sparsepp.

lczech avatar lczech commented on August 26, 2024

Yep, that works. With the added std::, my code compiles. I just sent a bug report to the libc++ mailing list, let's see what they say about this.

Thanks! I guess, we can close this issue then.

from sparsepp.

lczech avatar lczech commented on August 26, 2024

Short update:

It seems there were two problems involved. One with Clang (http://lists.llvm.org/pipermail/cfe-dev/2018-May/058005.html), and one with the libstdc++ (GCC) STL implementation (http://lists.llvm.org/pipermail/cfe-dev/2018-May/058017.html) - the added std however seems not to be the correct solution. The problem was however solved in libstdc++ a while ago, so I probably just need to update, and find out why Clang uses the GCC STL implementation in my setup...

Anyway, the problem is not due to sparsepp, so all good here ;-)

from sparsepp.

greg7mdp avatar greg7mdp commented on August 26, 2024

@lczech thanks a lot for the update!

from sparsepp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.