Michel Fortin:

> But if one of your function has an 'out' parameter, it's impossible to 
> implement the strong guarantee, as illustrated by this trivial example:
> 
>       void testOut(out int a) {
>               throw new Exception("hello!");
>       }
> 
>       void main() {
>               int a = 2;
>               try
>                       testOut(a);
>               finally
>                       writeln(a);
>       }
> 
> Prints:
> 
>       0
>       object.Exception: hello!
> 
> This happens because the out parameter gets reset to its default value 
> as soon as you enter the function, so you can't throw an exception 
> before it has been changed.
> 
> So should 'out' be reformed to behave more like a return value? I'm not 
> sure. But I think this is something to keep in mind when using out 
> parameters.


In a recent post here:
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=110908
and in some successive answers I have tried to explain that out arguments are a 
hack, they aren't as logically clean as multiple return values. I didn't think 
about exceptions too, your example adds one more case to what I was saying 
there. Thank you.

Bye,
bearophile

Reply via email to