On Sun, 03 Apr 2011 15:40:18 -0400, Nick Sabalausky <a@a.a> wrote:

"Andrej Mitrovic" <andrej.mitrov...@gmail.com> wrote in message
news:mailman.3093.1301858962.4748.digitalmar...@puremagic.com...
On 4/3/11, Nick Sabalausky <a@a.a> wrote:
I've always thought that we should be able to do something like this:

template foo(int val)
{
    enum foo = val.meta.argString;
}
static assert(foo!(2+3) == "2+3");


I wish we had some introspection to get the lines of code inside of a
function. But it's still pretty cool that you can pass expressions to
functions and automatically construct delegates. See here:

import std.stdio;

void main()
{
   int x;

   foo(false, x = 5);
   assert(x != 5);

   foo(true, x = 5);
   assert(x == 5);
}

void foo(bool doit, int delegate()[] dgs ...)
{
   if (doit)
       dgs[0]();
}

I wonder how many people know about this feature. I just bumped into
it a few days ago while looking through the docs.

I didn't know that. I think I remember the idea of it being discussed, but I
didn't know it was in.

It's been there forever (at least since I first learned D). It's even in D1:

http://www.digitalmars.com/d/1.0/function.html

Look for "Lazy variadic functions"

I think what you were thinking of is the replacement of lazy with simply a delegate (which this example is not).

-Steve

Reply via email to