[cfe-dev] libc++ std::isfinite() problem
Howard Hinnant
hhinnant at apple.com
Mon Jan 14 08:15:30 PST 2013
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
More information about the cfe-dev
mailing list