Various fixes
Hello!
My attempt to adopt this library for the project's use has ended up in several fixes.
1. Build fix:
the call braces were missed in one place, and it turns out that a static field requires an explicit definition, so luckily there's inline key in c++17.
2. Empty pointer fix:
I don't have a good understanding of what's going on there, but I saw 1 << 48 inside the pointer value very frequently, so I have protected all the places where the pointer is fetched from this markable-taggable reference.
Maybe it's just supposed to be the mark bit, i don't know. Please take a look at it, maybe ptr_split itself should be fixed.
Also, I suggest to redesign ptr_split to use masks and shifts, and to make accessors to those fields.
The reason is that the bit fields layout is implementation-defined:
- On big-endian architcture, "full" can be not what you expect (one might expect a pointer, if tag and mark are zero)
- The bitfield layout and alignment is implementation-defined, so it may vary from a combination of abi and compiler.
Maybe, here it's not a case, if a pointer is never assigned through "full", but the 48'th bit problem suggests a need for a look of some thoroughness. I wonder about the author's opinion.
3. Fix include paths
When used as a Library, the root tipically won't be in the include_directories list. So the relative paths should be used. I have also fixed the paths in the examples, though it's not required there
Best regards