Missed scope guard statements

Max Samukha samukha at voliacable.com.removethis
Thu Mar 6 06:00:39 PST 2008


On Thu, 06 Mar 2008 15:37:07 +0200, Max Samukha
<samukha at voliacable.com.removethis> wrote:

>On Thu, 6 Mar 2008 10:47:19 +0000, "Janice Caron"
><caron800 at googlemail.com> wrote:
>
>>On 06/03/2008, Max Samukha <samukha at voliacable.com.removethis> wrote:
>>>  if( true ) scope(exit) writef("hello");
>>>
>>> is semantically the same as simply
>>>  if( true ) writef("hello");
>>
>>For that matter,
>>
>>    if (true) anything
>>
>>is the same as
>>
>>    anything
>>
>
>scope is redundant in your example because it is the only statement
>within if's scope. It executes a block of statements when the thread
>exits if's scope. you could as well omit it.
>
>if (condition)
>{
>    scope(exit)
>   {
>		...
>   }
>}
>
>or without braces (according to you, doesn't work as expected)
>
>if (condition)
>    scope(exit)
>    {
>		...
>    }
>
>should be equivalent to
>
>if (condition)
>{
>	...
>}
>
>In case of static if, which doesn't create a new scope:
>
>{
>    static if (condition)
>       scope (exit)
>            writef("hello");
>
>} // hello should be printed when control gets here (not tested)
>
>>But I assume "if (condition)" what what was really intended. It seems
>>to me that one could instead write:
>>
>>    scope(exit) { if (condition) writef("hello") }
>>
>>That is, reverse the order of "scope" and "if".
>
>{
>    bool condition = ...
>	
>    ...
>	
>    scope(exit)
>    { 
>        if (condition) writef("hello");
>    }
>
>  ...	
>} // hello is printed at this point if condition is true
>  // and the function didn't return or throw before
>  // the 'scope'

Sorry, Janice, somehow my brain mistook you for Steve.
Please ignore
  


More information about the Digitalmars-d-bugs mailing list