[cfe-dev] libc++ std::isfinite() problem

Howard Hinnant hhinnant at apple.com
Mon Jan 14 09:01:04 PST 2013


On Jan 14, 2013, at 11:58 AM, Kal Conley <kcconley at gmail.com> wrote:

> Am 1/14/13 5:15 PM, schrieb Howard Hinnant:
>> On Jan 14, 2013, at 8:25 AM, Kal Conley <kcconley at gmail.com> wrote:
>> 
>>> Hi,
>>> I am getting compile errors trying to compile code which tries to do
>>> something equivalent to std::isfinite((int)0). I get:
>>> 
>>> test.cc:27:3: error: no matching function for call to 'isfinite'
>>> std::isfinite((int)0);
>>> ^~~~~~~~~~~~~
>>> /usr/bin/../lib/c++/v1/cmath:376:1: note: candidate template ignored:
>>> substitution failure [with _A1 = int]
>>> isfinite(_A1 __x)
>>> 
>>> This compiles OK on all versions of libstdc++ that I have tried. Is
>>> libc++'s implementation correct here? Should it be relying on templates
>>> and only allowing specializations that satisfy std::is_floating_point?
>> This looks like a libc++ bug to me.  Prior to Oct. 2010 libc++ was correct that std::isfinite should only accept floating point arguments.  But two paragraphs were reordered in N3126 with the result that std::isfinite (and several other functions) should now accept integral arguments as well.  I had not noticed the impact of this paragraph reordering until now.
>> 
>> Howard
>> 
> Which paragraphs do you have in mind?

In http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf

26.8/p10 and the deleted paragraph after p11.

Howard




More information about the cfe-dev mailing list