Niall Douglas wrote:
But for developers needing to test just compiled binaries in various
combinations and configurations, name mangling is an unalloyed win. As I
mentioned, I only just shot myself in the foot with this last week because
I wasn't mangling the true compiler compiling the binaries into the
library names on Windows.
FWIW, I was just looking into an issue with an exe compiled with -std=c++11
linking to Boost.System compiled with -std=c++03. Since the class layout of
boost::system::error_category was different depending on whether
was available, this lead to interesting times and baffling
stack traces.
Of course we don't actually have a b2 feature for -std, so its directory
encoding didn't help in this case. (And we don't encode this in the library
names either, but that can't be done until we have a feature.)
(Into the course of investigating this, I learned that libstdc++ performs
quite a bit of heroics to prevent C++11 std::string and C++03 std::string to
get mixed up in a similar way, or, if that's not possible, to make it work.
So this is not just a Windows issue. It's just that a lot of work is done
behind the scenes to keep things from breaking. Kind of like Boost.)