Future evolution of c++config.h and _GLIBCXX_USE_LONG_LONG

Gabriel Dos Reis gdr@integrable-solutions.net
Tue Jan 11 23:41:00 GMT 2005


Matt Austern <austern@apple.com> writes:


[...]

| That's where I start getting nervous.  I see two options, and I'm
| nervous about both of them.  I hope someone here can tell me not to be
| nervous about at least one choice.
| 
| Choice 1: Libc headers should always expose long long functionality
| whenever those headers are compiled as C++.  This makes me nervous
| because it means there will be no way for users to get full standard
| conforming C++ on Darwin.  If libstdc++ evolves to allow turning long
| long on and off at the level of an individual compilation, then a Libc
| that exposes long long unconditionally won't be able to take advantage
| of that.
| 
| Choice 2: Libc headers should all include c++config.h and test
| _GLIBCXX_USE_LONG_LONG.  This makes me nervous because c++config.h and
| everything associated with them are internal to libstdc++.h, and
| there's no reason to think this solution will work in future releases.
| 
| I'm leaning toward choice 1: it's inelegant but probably safe.  Anyone
| want to give me arguments in either direction, or suggest a third
| choice?

The impermeable separation of libc from libstdc++ is the root of many
headaches and unnecessary kludges. For example, it means that it is
quite difficult to implement <cxxx> and <xxx.h> correctly.  It also
means that one gets into the trouble you're describing.

At several occasions, Benjamin and I and others (I think I remember
Joe) have expressed the idea that we should look for better
cooperation between libstdc++ and libc implementers, meaning that
libstdc++s should provide hooks for libc so that exceptions match on
both sides.  (I believe there are some bits of that in glibc).

In particular, I think Choice 2 is in the good direction.  We can
agree on, for example, that _GLIBCXX_USE_LONG_LONG is alsways going to
set be honored -- even in C++0x :-)

The impermeable separation between libc and libstdc++ is purely
abstract and unproductive.

-- Gaby



More information about the Libstdc++ mailing list