Do these two source file(i.e. include\c_std\cstdlib and include\c_global\cstdlib) serve for different purposes whereas they contain similar content?

Jonathan Wakely jwakely@redhat.com
Thu Aug 13 13:53:00 GMT 2020


On 13/08/20 14:24 +0100, Jonathan Wakely wrote:
>On 13/08/20 09:06 -0400, stephen.webb@bregmasoft.ca wrote:
>>
>>Quoting Jonathan Wakely via Libstdc++ <libstdc++@gcc.gnu.org>:
>>
>>>On 12/08/20 20:15 +0800, 孙世龙 sunshilong via Libstdc++ wrote:
>>>>Hi, list
>>>>
>>>>These two source files (i.e. include\c_std\cstdlib and
>>>>include\c_global\cstdlib) have almost same content.
>>>>What is their own role?
>>>>Do these two source files serve for different purposes whereas they
>>>>contain similar content?
>>>
>>>You can ignore the c_std one.
>>>
>>>The headers in that directory are only used if you build gcc with
>>>--enable-cheaders=c_std but nobody does that, and they aren't properly
>>>maintained any more, and they probably don't work.
>>
>>To answer the first question, the c_std and c_global set up was to 
>>accommodate the fact that some target systems had C++ support in 
>>their libc system headers by putting symbols in the std:: namespace 
>>requiring their symbols to be hoisted into the global namespace in 
>>the <c...> headers (the c_std strategy), and some had only support 
>>for the C language and all their symbols were already in the global 
>>namespace (the c_global strategy).  I don't believe any of the 
>>former systems (eg. Solaris 8) are supported by GCC any more.
>
>But if you look at the include/c_std/ headers, they all pull symbols
>from the global namespace into namespace std ... exactly like the
>c_global ones.
>
>I agree that the intended behaviour was what you describe, but I don't
>think it ever actually worked, and I don't think any targets using
>--enable-cheaders=c_std have ever existed.

We also have the include/c/cxxx headers, which assume that the libc
headers put the names in *both* the global namespace and namespace
std. QNX uses that (see configure.host).

We should probably deprecate the --enable-cheaders=c_std configure
option and eventually remove those headers. We could make the
configure option give an error for c_std unless something like
--enable-cheaders-obsolete is also used.

I'll prepare a patch ...



More information about the Libstdc++ mailing list