Thread overview
Does is(f == function) work?
Mar 09, 2021
Andrey Zherikov
Mar 09, 2021
Adam D. Ruppe
Mar 09, 2021
Andrey Zherikov
Mar 09, 2021
Adam D. Ruppe
Mar 09, 2021
Kyle Ingraham
Mar 09, 2021
Boris Carvajal
Mar 10, 2021
Andrey Zherikov
March 09, 2021
What am I doing wrong?

void f() {}

writeln(typeof(f).stringof);   // prints "void()"

writeln(is(f == function));    // prints "false"
March 09, 2021
On Tuesday, 9 March 2021 at 02:50:11 UTC, Andrey Zherikov wrote:
> writeln(is(f == function));    // prints "false"

try

is(typeof(f) == function)

it is kinda weird but that's the trick
March 09, 2021
On Tuesday, 9 March 2021 at 02:57:46 UTC, Adam D. Ruppe wrote:
> try
>
> is(typeof(f) == function)
>
> it is kinda weird but that's the trick

Thanks!
Should it work for in this case as well?

alias f = (){};

writeln(typeof(f).stringof);        // prints "void function() pure nothrow @nogc @safe"

writeln(is(typeof(f) == function)); // prints "false"

March 09, 2021
On Tuesday, 9 March 2021 at 11:58:45 UTC, Andrey Zherikov wrote:
> Should it work for in this case as well?
>
> alias f = (){};

I actually don't know. The docs do say that function pointers work differently - they match `is(typeof(f) == return)` but it isn't clear if it would match == function.

You'd certainly think it would... but idk.
March 09, 2021
On Tuesday, 9 March 2021 at 11:58:45 UTC, Andrey Zherikov wrote:
> On Tuesday, 9 March 2021 at 02:57:46 UTC, Adam D. Ruppe wrote:
>> try
>>
>> is(typeof(f) == function)
>>
>> it is kinda weird but that's the trick
>
> Thanks!
> Should it work for in this case as well?
>
> alias f = (){};
>
> writeln(typeof(f).stringof);        // prints "void function() pure nothrow @nogc @safe"
>
> writeln(is(typeof(f) == function)); // prints "false"

Does Unqual help here?: https://dlang.org/phobos/std_traits.html#Unqual
March 09, 2021
On Tuesday, 9 March 2021 at 11:58:45 UTC, Andrey Zherikov wrote:
> On Tuesday, 9 March 2021 at 02:57:46 UTC, Adam D. Ruppe wrote:
>> try
>>
>> is(typeof(f) == function)
>>
>> it is kinda weird but that's the trick
>
> Thanks!
> Should it work for in this case as well?
>
> alias f = (){};
>
> writeln(typeof(f).stringof);        // prints "void function() pure nothrow @nogc @safe"
>
> writeln(is(typeof(f) == function)); // prints "false"

Not quite straightforward, but "void function()" is actually a pointer to function, you need to dereference it first:

is(typeof(*f) == function)
March 10, 2021
On Tuesday, 9 March 2021 at 18:53:06 UTC, Boris Carvajal wrote:
> On Tuesday, 9 March 2021 at 11:58:45 UTC, Andrey Zherikov wrote:
>> On Tuesday, 9 March 2021 at 02:57:46 UTC, Adam D. Ruppe wrote:
>>> try
>>>
>>> is(typeof(f) == function)
>>>
>>> it is kinda weird but that's the trick
>>
>> Thanks!
>> Should it work for in this case as well?
>>
>> alias f = (){};
>>
>> writeln(typeof(f).stringof);        // prints "void function() pure nothrow @nogc @safe"
>>
>> writeln(is(typeof(f) == function)); // prints "false"
>
> Not quite straightforward, but "void function()" is actually a pointer to function, you need to dereference it first:
>
> is(typeof(*f) == function)

That's a trick! Thank you!