Feature or bug: print braces

Dennis Ritchie via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu May 14 17:13:30 PDT 2015


On Thursday, 14 May 2015 at 22:55:43 UTC, Ali Çehreli wrote:
> Yes, it is weird but that value happens to be the address of 
> the function. Here is another test:
>
> import std.stdio;
>
> void foo() pure nothrow @nogc @safe
> {}
>
> void main()
> {
>     void printInfo(T)(T t)
>     {
>         writefln("%s %s", T.stringof, t);
>     }
>
>     auto f = (){};    // <-- Why the need for () here?
>
>     printInfo(&foo);
>     printInfo(f);
>     printInfo({});    // <-- No need for () here.
> }
>
> There is an inconsistency where a lambda need to be defined 
> with empty parentheses in one context while it is just fine 
> without in another context.
>
> One output shows that they are all of the same type (function 
> pointers):
>
> void function() pure nothrow @nogc @safe 473264
> void function() pure nothrow @nogc @safe 4732BC
> void function() pure nothrow @nogc @safe 4732C4
>
> Ali

Thanks. This example explains a lot. It's like echoes UFCS :)


More information about the Digitalmars-d-learn mailing list