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.