Opened 6 years ago
Last modified 6 years ago
#12806 new Bugs
flat_map.hpp function force_copy break strict-aliasing on gcc < 4.4
Reported by: | Owned by: | Ion Gaztañaga | |
---|---|---|---|
Milestone: | To Be Determined | Component: | container |
Version: | Boost 1.63.0 | Severity: | Showstopper |
Keywords: | Cc: |
Description
Hello!
On function (https://github.com/boostorg/container/blob/develop/include/boost/container/flat_map.hpp#L61):
template<class D, class S> BOOST_CONTAINER_FORCEINLINE static D force_copy(S s) { D *vp = reinterpret_cast<D *>(&s); return D(*vp); }
gcc 4.3.4 (SLE 11) produced wrong code. It seems that the compiler does not create a copy of an object "s" and returns an object of D().
If I change the signature of function on "BOOST_CONTAINER_FORCEINLINE static D force_copy(const S& s)" the code works and the tests pass. But then does not create a copy of an object "s" in a function call.
I'm not sure that this change is correct. Is there any other workaround for this problem with a compiler gcc 4.3 or better disable strict-aliasing?
Sorry for the long delay. Catching by const reference should not be a problem. I'll try to test it in several compilers.