|
Boost : |
Subject: Re: [boost] C++03 / C++11 compatibility question for compiled libraries
From: Edward Diener (eldiener_at_[hidden])
Date: 2018-02-08 15:28:51
On 2/8/2018 9:20 AM, Peter Dimov via Boost wrote:
> Edward Diener wrote:
>
>> As far as which library to use, depending on the compiler/version
>> available, either boost or std, of two very similar libraries, this is
>> what my Cxx_dual library (https://github.com/eldiener/cxx_dual) is all
>> about.
>
> That's not going to work at all if link compatibility is desired. If you
> have
>
> class something
> {
> private:
>
> Â Â CXXD::function<void()> f_;
>
> public:
>
> Â Â // ...
> };
>
> the layout of `something` changes between C++03 and C++11, which leads
> to incredibly nasty things at runtime as objects appear at the wrong
> address and the observed behavior makes no sense.
I discuss a solution for this in the documentation topic "Use in a
non-header only library".
>
> I inadvertently introduced such a problem in Boost.System when I made
> the object layout dependent on whether <system_error> was available, to
> enable conversions from/to std::error_code. It's not fun at all. (I have
> since fixed that, and added tests that link to the library from a
> forced-03 or forced-11 main.cpp. Incidentally, the layout of std::string
> also changes between 03 and 11, so if such compatibility is desired, you
> can't use that either.)
>
> (But there's absolutely no need to use std::function "for std::bind
> compatibility". boost::function can store std::bind just fine (and vice
> versa.))
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk