On Tue, 21 Jun 2011 19:04:11 -0400, bearophile wrote: > Ali Çehreli: > >> char[] result = foo(); >> string immutable_result = assumeUnique(result); >> >> But that's the wrong thing to do, as foo() may be changed in the future >> to return a non-unique result. > > I think assumeUnique is meant to be used inside foo(), at its end.
You're right: even the documentation example of assumeUnique does that. But I think the problem here is at the interface. The type conversions that foo() applies internally doesn't change the original question of whether to return mutable or immutable. My point is that foo() should not care, as the data is already mutable. Why force the caller to make a copy. But I understand that the language doesn't help here. I wonder whether a UniqueRef object could be returned, which could allow a single casting of its data to mutable or immutable at the call site. Further casts could throw, but that would be a runtime solution. :-/ Wait! :) I just grepped and learned about std.typecons.Unique. Ok, that's the idea but it is not fully implemented yet or doesn't work... Comments say "doesn't work yet". :-/ Ali
