www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Does is(f == function) work?

reply Andrey Zherikov <andrey.zherikov gmail.com> writes:
What am I doing wrong?

void f() {}

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

writeln(is(f == function));    // prints "false"
Mar 08 2021
parent reply Adam D. Ruppe <destructionator gmail.com> writes:
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
Mar 08 2021
parent reply Andrey Zherikov <andrey.zherikov gmail.com> writes:
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"
Mar 09 2021
next sibling parent Adam D. Ruppe <destructionator gmail.com> writes:
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.
Mar 09 2021
prev sibling next sibling parent Kyle Ingraham <kyle kyleingraham.com> writes:
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
Mar 09 2021
prev sibling parent reply Boris Carvajal <boris2.9 gmail.com> writes:
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)
Mar 09 2021
parent Andrey Zherikov <andrey.zherikov gmail.com> writes:
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!
Mar 09 2021