FunctionTypeOf behaves unexpectedly for function pointers?

Basile B. via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jul 30 05:54:32 PDT 2016


On Friday, 29 July 2016 at 13:54:13 UTC, pineapple wrote:
> This failure seems curious and I haven't been able to 
> understand why it occurs, or whether it might be intentional. 
> For all other callable types, including functions and delegates 
> and types implementing opCall, the assertion passes.
>
>     import std.traits : FunctionTypeOf;
>     void function() func;
>     // Error: static assert  (is(void() == void function())) is 
> false
>     static assert(is(FunctionTypeOf!func == typeof(func)));

func is a pointer to a function but FunctionTypeOf extracts the 
target type.
So the correct assertion is

     static assert(is(FunctionTypeOf!func* == typeof(func)));

I can't believe that it worked for delegates because the same 
happens. It extracts the target type, i.e it discards the 
information saying that it's a member function:

     import std.traits;
     void function() fun;
     void delegate() dlg;
     static assert(is(FunctionTypeOf!fun* == typeof(fun)));
     static assert(is(FunctionTypeOf!dlg* == typeof(fun)));




More information about the Digitalmars-d-learn mailing list