Strange C++ function pointer test
Marc Glisse
marc.glisse@inria.fr
Thu Dec 31 09:58:00 GMT 2015
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);
> #endif
>
> (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
> floats.)
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
More information about the Gcc
mailing list