On 10/2/13 8:14 PM, deadalnix wrote:
On Thursday, 3 October 2013 at 02:21:19 UTC, Andrei Alexandrescu wrote:
On 10/2/13 10:06 AM, Dicebot wrote:
On Wednesday, 2 October 2013 at 16:12:58 UTC, Jesse Phillips wrote:
   if (word.length)
       scope(exit) FormatOutput();

This is the same as

   if (word.length)
       FormatOutput();

The `if` introduces a new scope, thus running the code right away.

Oops, shame on me. Too many `static if`s in my life :(

I think it's a common mishap. Might be nice if the compiler disallowed
gramatically an unbraced if/while/etc containing only one scope
statement.

Andrei

Or more generally cope statement at the end of a scope.

I'm cautious about that; that's why I specified "unbraced". Consider:

if (lily)
{
    scope(exit) writeln("Lily was here.");
    // fun();
}

This code is a plausible edit of work that was meaningful and in which the programmer has temporarily commented out the call to fun. If the compiler would obnoxiously protest that the edited code can't compile, that may be more aggravation than win for the user.

In contrast, this is no simple edit of any sensible code:

if (lily)
    scope(exit) writeln("Lily was here.");

Here, the compiler is much more within its rights to demand a code change, either to

scope(exit) if (lily) writeln("Lily was here.");

or

if (lily) writeln("Lily was here.");

or

if (lily)
{
    scope(exit) writeln("Lily was here.");
}


Andrei

Reply via email to