On 6/26/23 2:42 PM, Cecil Ward wrote:

==
{
size_t p = offset;
++p;
scope(exit) { writeOutput( 0, p );

++p
…
++p;

return;
}

==

The correctness of its behaviour depends on what the value of p is when it calls writeOutput(), and the value of p is being changed. To be correct, the final value of p needs to be passed to writeOutput( p ). That was what I was worrying about. I could have course introduce another variable to capture this final value and use that in the scope guard, but then I can’t make the scope guard general if I have more than one exit route. The compiler sounded as if it did not like the local variable p in the scope guard, but I need to try it again to get the error message.

That will print the final value of `p`. `p` lives at the same address for the entire function, and the scope exit prints the value from that address.

-Steve
  • Re: Scope guards Paul Backus via Digitalmars-d-learn
    • Re: Scope guards Cecil Ward via Digitalmars-d-learn
      • Re: Scope guards Steven Schveighoffer via Digitalmars-d-learn

Reply via email to