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