[patch] libstdc++/65473 Make <ciso646> define libstdc++ version macros.
Martin Sebor
msebor@gmail.com
Thu Sep 3 19:22:00 GMT 2015
On 09/03/2015 04:58 AM, Jonathan Wakely wrote:
> This change would allow including <ciso646> to be used to check for
> __GLIBCXX__ and detect whether youre using libstdc++ or not. Howard
> Hinnant recommends including that header for libc++ because it has no
> other effects in C++.
>
> We could make every <cxxx> header include <bits/c++config.h> so that
> any of them can be used, but I can't be bothered doing that change!
> This makes it work for the one header that is recommended to be used,
> but of course that doesn't help people using older versions of
> libstdc++, who still need to include some other header.
>
> Is this worth doing?
I'd say it's worth doing consistently, in every header. Users are
told by others (e.g., on various discussion forums) to expect to
be able to check what C++ library implementation they're using by
including any C++ standard header and testing the known version
macros.
Martin
PS Out of curiosity I looked to see which headers don't include
c++config.g.
$ (for f in cassert ccomplex cctype cerrno cfenv cfloat cinttypes
ciso646 climits clocale cmath csetjmp csignal cstdalign cstdarg cstdbool
cstddef cstdint cstdio cstdlib cstring ctgmath ctime cuchar; do printf "
%-20s " "<$f>" && echo "#include <$f>" | ~/bin/gcc-5.1.0/bin/g++ -E
-std=c++14 -xc++ - | grep -l "c++config\.h" | wc -l; done )
<cassert> 0
<ccomplex> 1
<cctype> 1
<cerrno> 0
<cfenv> 1
<cfloat> 0
<cinttypes> 1
<ciso646> 0
<climits> 0
<clocale> 1
<cmath> 1
<csetjmp> 1
<csignal> 1
<cstdalign> 1
<cstdarg> 1
<cstdbool> 1
<cstddef> 1
<cstdint> 1
<cstdio> 1
<cstdlib> 1
<cstring> 1
<ctgmath> 1
<ctime> 1
<cuchar> <stdin>:1:18: fatal error: cuchar: No such file
or directory
compilation terminated.
0
More information about the Libstdc++
mailing list