From: Robert Ramey (ramey_at_[hidden])
Date: 2004-03-12 13:28:31


John Maddock wrote:

>> Robert Ramey wrote:
>> a) Sprinkle #ifdef BORLAND in those 14 files
>> b) Tweak cpp_c_headers files
>> c) Or ? what?
>>
>> What is the least worst way to handle this?
>>
>> If I have to use a) what is the point of even having cpp_c_headers?

>Here's the problem: those headers were only supplied as a workaround for
>compilers that don't supply new style headers at all, they all use the
>following workaround:

>#include <string.h>

>namespace std{ using ::memcpy; } //etc

>However for conforming compilers this is defective for two reasons:

>It needlessly introduces C functions into the global namespace (including
><cstring> should not do that).
>It shouldn't compile at all: memcpy is already declared in std, the version
>in the global namespace is an alias introduced with a using declaration,and
>importing it back into std *should fail*.

>Now the interesting thing is, I know of only two vendors who are shipping
>std conforming C headers: Borland and Metrowerks. Since you don't mention
>the latter my guess is you're not testing with it ;-)

>The normal workaround that Boost libs have been using is:

>#include <cstring>
>#include <boost/config.hpp>
>#ifdef BOOST_NO_STDC_NAMESPACE
>namespace std{ using ::memcpy; }
>#endif

OK, I can live with this. But if cpp_c_headers has conditioned on the
compiler then what is the point of having it all? What use can it have?

Robert Ramey