Comments (11)
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.
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.
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.
What is the definition of your sparsepp map or set?
from sparsepp.
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.
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.
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.
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.
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.
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.
@lczech thanks a lot for the update!
from sparsepp.
Related Issues (20)
- Support operator[] with rvalue HOT 1
- When hashing on vector HOT 13
- Help me to serialize/deserialize sparse_hash_map<int , vector< std::string > > HOT 1
- missing return value in function spp_sptr& operator=(spp_sptr &&o) ? HOT 1
- SIGSEGV on using move-assigned-from hash set HOT 3
- Unable to create map for value type with deleted copy constructor HOT 2
- Can't insert std::tuple: spp uses deleted constructor/destructor HOT 1
- Lookup non-present keys becomes very slow. HOT 1
- Do you support C++11 stateful allocators? HOT 1
- Default allocator doesn't throw and caller doesn't check for NULL HOT 1
- SEGV after moving hash_map HOT 2
- conan package HOT 2
- sparse_hash_map<uint32_t, uint64_t> takes more memory than sparse_hash_map<uint64_t, uint64_t> HOT 1
- memcpy can happen with null "source" parameter HOT 6
- class-memaccess warning when compiling with GCC 8 or later HOT 1
- Problem when compiling on macOS catalina HOT 6
- Can sparse_hash_map support unique_ptr?
- Compiler warning on realloc call within sparsepp. HOT 1
- Error when compile: is not a special member function which can be defaulted HOT 2
- Missing return value. HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sparsepp.