On 31 December 2015 at 13:09, Dominik Vogt <v...@linux.vnet.ibm.com> wrote: > On Thu, Dec 31, 2015 at 12:42:56PM +0000, Jonathan Wakely wrote: >> On 31 December 2015 at 11:54, Dominik Vogt wrote: >> > Is there a requirement for a certain minimum Glibc version for >> > this to work? >> >> It doesn't work with any glibc, because it doesn't declare the C++ overloads. > > All right, so, the situation is: > > * The test includes just stdlib.h and math.h. > * The test expects the float variant of abs to be available. > * It tests the C++ compiler on C code, so it *does not* use any > C++ specific code (namespace or C++ headers).
That sentence is meaningless. If you use a C++ compiler then you're compiling C++ code. > * The C++-11 standard does *not* require that any overloaded > variants of abs() are available when inclding math.h, right? Wrong. As specified in [c.math], <cmath> declares these in namespace std: float abs(float); double abs(double); long double abs(long double); and <math.h> declares the same overloads in the global namespace. > > ==> > > The assumption that the test should compile without error is > bogus? No, the test is valid. > The test seems to assume that including math.h with the > C++ compiler is the same as including cmath. No it doesn't. If the test included <cmath> then it would have to use std::abs. Because it includes <math.h> it uses ::abs. >> Libstdc++ has an include/c_compatibility/math.h header that would >> include <cmath> (which declares the C++ overloads) and then pull them >> into the global namespace, but that isn't used on GNU/Linux, and would >> create other problems. >> >> This is already in Bugzilla: >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60401 > > Yet this bug report wants stdlib.h (or math.h) included from C++ > to add the non-int signatures to the abs() function? Yes.