Understand typeof trick

Joakim Brännström via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Dec 25 07:36:50 PST 2015


On Friday, 25 December 2015 at 14:55:04 UTC, anonymous wrote:
> On 25.12.2015 13:10, Joakim Brännström wrote:
>> [B]
>> Evaluates to the function type "constructed" by binaryFun.
>
> Almost. It evaluates to the type of the expression. The 
> expression is a function call, so typeof evaluates to the 
> return type of the generated function.

Ahh, I missed this.
The subtle difference between:
int fun(uint x) { return 1; }
pragma(msg, typeof(fun));   // -> int(uint x)
pragma(msg, typeof(fun());  // -> int

> That second one leads us to the longest form of the is-typeof 
> idiom: `is(typeof({foo(); bar();}))`. Wrapping the code in a 
> delegate so that it's an expression, which can be passed to 
> typeof.

Nice, didn't know that was possible. I'll remember that.

Thank you for the detailed answer.



More information about the Digitalmars-d-learn mailing list