http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49813
--- Comment #17 from rguenther at suse dot de <rguenther at suse dot de> 2011-07-22 11:43:57 UTC --- On Fri, 22 Jul 2011, paolo.carlini at oracle dot com wrote: > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49813 > > --- Comment #16 from Paolo Carlini <paolo.carlini at oracle dot com> > 2011-07-22 11:40:07 UTC --- > (In reply to comment #14) > > There is also a using ::asinhf but still std:: provides an overload. > > So? This is what C++0x says we should have. > > As regards a complete testcase, I gave two, one using <math.h>, one a *real > world* piece of C++0x code, compiled with -std=c++0x on Linux. > > #include <cmath> > > int main() > { > constexpr double cds = std::sinh(1.0); // Ok > constexpr double cdas = std::asinh(1.0); // Not Ok. > double das = std::asinh(1.0); // Ok. > } > > we don't want those inconsistencies. > > By the way, I find your: > > constexpr double cdas = __builtin_asinh(1.0); > > very interesting. Looks like really the front-end is doing something strange > wrt declarations of C99 functions: if <math.h> provided by glibc is include > then the declarations are definitely there, in strict c++0x mode too, but the > front-end is trying to invent something on its own, disregards those > declarations somehow, but *only* when dealing with constexpr data, not > otherwise. Is it valid in C++0x to provide a global function double asinh (double x) { abort (); } ? In that case we can't inject __builtin_asinh as asinh into the global namespace (as -std=gnu++0x does) and the using ::asinh is bogus(?) If the above is invalid then with -std=c++0x the C++ frontend should set flag_iso_c99 to true. Richard.