C++ header file problem - is this a bug?

Matt Austern austern@apple.com
Mon Jan 10 22:14:00 GMT 2005


On Jan 10, 2005, at 12:36 PM, Matt Austern wrote:


> On Jan 4, 2005, at 9:54 PM, Bill Northcott wrote:
>
>
>> On 05/01/2005, at 6:27 AM, Dave Korn wrote:
>>>   Did you notice that you're writing C++, and ***NOT*** C?
>>>
>>>   As such, you should use the C++ library functions and headers, not 
>>> the C
>>> library functions and headers, since they're for a different 
>>> programming
>>> language.
>>>
>>>   Why aren't you using the std::isnan() function?
>>
>> I can't find any documentation, and if I try to use it I get the 
>> following:
>> error: `isnan' undeclared  in namespace `std'
>> which is unsurprising since it does not appear to be declared or 
>> defined in any header in /usr/include except math.h, which gets 
>> stuffed by cmath.
>>
>> Would those be adequate reasons not to use it?
>>
>> Just how is one expected to get isnan() functionality in a C++ 
>> program?
>
> I'm not so sure our current behavior is correct either.
>
> First, I don't understand the motivation for undefining isnan as a 
> macro and then defining an std::isnan within namespace std.  Yes, it's 
> true that defining an isnan macro would violate the C++ standard.  But 
> then, defining an isnan function within namespace std violates the 
> standard too.  Why go to all this effort merely to change one kind of 
> standard violation into another kind?
>
> Second, as Bill has pointed out, we're not doing this completely.  At 
> least on Darwin, we're undefining that macro and replacing it with 
> nothing.

Sorry, I wrote this without testing---always a mistake.

As of 4.0 we're doing something on Darwin that's not so hard to 
understand: the <math.h> form keeps the C99 macros from the system 
headers, and the <cmath> form gets rid of those macros and replaces 
them with a function template.

I'm not sure whether it was intended for isnan to be so different in 
<math.h> and <cmath> (I still haven't seen a specification for how 
we're trying to treat the C99 math macros), but what we're doing seems 
reasonably sane and defensible to me.

             --Matt



More information about the Gcc mailing list