[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