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

Kal Conley kcconley at gmail.com
Mon Jan 14 09:46:48 PST 2013


Am 1/14/13 6:01 PM, schrieb Howard Hinnant:
> 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
>
You mean "The classification/comparison functions behave the same as the
C macros with the corresponding names defined in..." and since the C
macros seem to accept integer types so should the c++ variants? Is it
even defined behavior in the C standard to pass integers to these macros?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130114/ec60f072/attachment.html>


More information about the cfe-dev mailing list