https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61758

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Martin von Gagern from comment #4)
> (In reply to Jonathan Wakely from comment #2)
> > It is totally unsupported (and unlikely to work) to mix C++11 code built
> > with GCC 4.x and 4.y, for any x!=y
> 
> Any particular reason why you don't change the SONAME of the library for
> every change from x to y in this case?

Think about it. That would prevent you from combining C++03 code compiled with
different versions, and that works fine and is not experimental. Forcing
millions of lines of C++03 code to be recompiled because of changes to
experimental C++11 features would not be acceptable.

> The way I see it, this might be causing serious problems for Gentoo in the
> near future. As far as I understand things, Gentoo will always dynamically
> link against the latest version of libstdc++, even though different versions
> of gcc (and there can be several installed concurrently) will compile
> against their own matching version. Assuming ABI backwards-compatibility, at
> least with the help of symbol versioning, this probably worked well enough
> so far. But if there are no such guarantees for C++11 then things will break
> more often as applications start to use C++11.

There will be guarantees soon, when the ABI stabilises. Until then, if Gentoo
does that then it's Gentoo's problem. We can devote our limited resources to
getting the ABI stable sooner, or we can spend our time on loads of nasty hacks
to maintain compatibility for people using unsupported configurations and
expecting behaviour we never guaranteed.

> > Mixing code built with 4.8.x and 4.8.y should work, and does with the
> > default configuration.
> 
> I've got some doubts regarding 4.8.0 to 4.8.1 since the commits I mentioned
> were in between. But I don't have evidence to support my doubts, and I'm
> more interested in the 4.7 to 4.8 issues.

There is no guarantee of compatibility for C++11 features between those
releases, so any issues are irrelevant.


> > (which should not be necessary with GCC 4.8 anyway) then you need to
> > rebuild all the libraries that depend on the <chrono> types.
> 
> Using gcc 4.8 throughout works fine, it's the mixing of a 4.7 compiler,
> configured as system default, and a 4.8 library used since it's the latest,
> which is causing the specific troubles on Gentoo.

You can't do that for code that uses C++11 library types. Period. Not a bug.

> That way, you would not have to maintain the --enable-libstdcxx-time config
> setting, and you would also help portability in those cases where code was
> compiled on a 4.7 system with --enable-libstdcxx-time no matter the setting
> used for the 4.8 system where the code is executed.

I'm not interested in supporting C++11 code built with 4.7 and linking to 4.8
at runtime. Don't do that.

Reply via email to