This takes care of the rest of the inline namespace issues outlined in
bugzilla, minus docs which I will complete posthaste.
The main part of this patch is c++config.h, where the macros used to
activate inline namespaces change. In a nutshell, instead of always
using a macro on the top-level namespace (std) to push and pop
conditional namespaces, the top-level namespace (std) is
unconditionally defined and all inline namespaces have their own macro
for conditional use of the form:
_GLIBCXX_BEGIN_NAMESPACE_*
_GLIBCXX_END_NAMESPACE_*
I'm not John Pawson, but I'm hoping others agree with me that the new
style c++config.h is smaller, better, faster, easier to read. Most of
all the space dedicated to inline namespaces is...... almost nothing.
Comparatively, of course.
In addition, several advantages:
1) top-level namespaces not being a macro mean that many standard
editors now properly indent the libstdc++ sources without extra work
2) full matrix of inline namespace combinations now work correctly with
each other: previously, versioned + debug did not work, etc. The
correct nesting of inline namespaces solves this general class of bugs.
3) all C++0x namespaces in std now are fair game to
profile/debug/parallel modes
4) the additional clarity in std namespace partitions for extended modes
means that it will be possible to add debug versions of things that are
now sequestered in parallel sub-namespaces. I wasn't quite sure how to
do this before, which was worrisome given the direction of work in both
debug and parallel mode.
tested x86_64/linux -fvisibility=hidden
tested x86_64/linux
tested x86_64/linux -D_GLIBCXX_DEBUG
tested x86_64/linux -D_GLIBCXX_PROFILE
tested x86_64/linux -D_GLIBCXX_PARALLEL
all below configured with --enable-symvers=gnu-versioned-namespace
tested x86_64/linux
tested x86_64/linux -D_GLIBCXX_DEBUG
tested x86_64/linux -D_GLIBCXX_PROFILE
tested x86_64/linux -D_GLIBCXX_PARALLEL