http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49813
--- Comment #41 from Paolo Carlini <paolo.carlini at oracle dot com> 2011-07-25 19:58:52 UTC --- The testcase in Comment #30 has the types wrong, the below is a corrected version (the substance of the issue doesn't change at all). I'm also thinking of checking in the library bits with a temporary workaround of the form: inline constexpr bool isinf(long double __x) { return fpclassify(__x) == FP_INFINITE; } which works. ///////////// inline constexpr bool isinf(long double __x) { return __builtin_isinf(__x); } inline constexpr bool isinf(double __x) { return __builtin_isinf(__x); } inline constexpr bool isnan(long double __x) { return __builtin_isnan(__x); } int main() { constexpr int i1 = __builtin_isinf(1.l); // Ok. constexpr bool b2 = isinf(1.l); // Error. constexpr bool b3 = isinf(1.); // Ok. constexpr bool b4 = isnan(1.l); // Ok. }