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