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