
From: nevin@eviloverlord.com Subject: Re: [boost] New libraries implementing C++11 features in C++03
On 24 November 2011 22:51, Nathan Ridge <zeratul976@hotmail.com> wrote:
There is a big difference between upgrading a library and switching to a new language specification. For starters, C++03 and C++11 are ABI- incompatible on most implementations that I know of.
Is this documented somewhere? I've seen ABI changes based on compiler releases, but not based on whether or not the C++0x flag is set. I'd love to be as informed as you are on this.
This thread describes the situation nicely for GCC: http://gcc.gnu.org/ml/gcc/2011-10/msg00113.html. I haven't been following clang as closely, but I think they're doing somewhat better in that the libc++ ABI is the same in both modes.
That means that before you can even compile your code in C++11 mode, every library and piece of code that your code links to must also be recompiled in C++11 mode.
Sure sounds like when someone changes a version of Boost, they end up having to recompile the world both to avoid ODR violations and to make sure things link correctly. (Or course, if they have pieces of code that don't use Boost those can remain unchanged.)
I'm no expert on this topic, but I think as long as calls across module boundaries do not take parameters of Boost types, the modules can be compiled with different versions of Boost... I could be wrong though. And of course, for header-only libraries like Boost.Local there should be no problem whatsoever. Regards, Nate