This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Strange C++ function pointer test

On Thu, 31 Dec 2015, Dominik Vogt wrote:

This snippet ist from the Plumhall 2014 xvs test suite:

 #if CXX03 || CXX11 || CXX14
 static float (*p1_)(float) = abs;
 checkthat(__LINE__, p1_ != 0);

(With the testsuite specific macros doing the obvious).  abs() is
declared as:

 int abs(int j)

Am I missing some odd C++ feature or is that part of the test just
plain wrong?  I don't know where to look in the C++ standard; is
this supposed to compile (with or without a warning?) or generate
an error or is it just undefined?

 error: invalid conversion from âint (*)(int) throw ()â to âfloat (*)(float)â [-fpermissive]

(Of course even with -fpermissive this won't work because (at
least on my platform) ints are passed in different registers than

There are other overloads of 'abs' declared in math.h / cmath (only in namespace std in the second case, and there are bugs (or standard issues) about having them in the global namespace for the first one).

Marc Glisse

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]