On Tuesday, 18 June 2013 at 07:58:06 UTC, Kenji Hara wrote:
In D, variable declaration with default construction is always nothrow. So, enclosing the declaration of s by nothrow block is unnecessary.

Well, what about construction with args...

For nothrow destruction, you can add following static assert in foo().

static assert(__traits(compiles, ()nothrow{ Sentinel s; }), "Sentinel
dtor is not nothrow");

Right. Good point.

This is a compiler bug, and I recently fixed it in git master. Explicit
argument passing does not need anymore.

Cool, thanks.

Inlining should remove performance penalty. Nobody holds the immediately called lambda, so it should be treated as a 'scope delegate'. For that, we
would need to add a section in language spec to support it.

Alright.

----------------
So my conclusion is that the lambda tric is a partial workaround. We'd need real support for being able to have specific qualification inside
bodies.


I don't think so. We can sufficiently use lambda for the "attribute block".

Kenji Hara

Maybe you are right. I will keep using it for now.

Reply via email to