[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