[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