On Monday, 11 February 2013 at 15:12:07 UTC, deadalnix wrote:
On Monday, 11 February 2013 at 14:54:48 UTC, kinke wrote:
I'd propose a small change so that suited structs are passed
transparently byref only if the parameter is not mutable,
e.g., for a function foo(const BigStruct s). The compiler
would therefore not need to analyze the code flow in the
callee to determine if the parameter is modified and hence a
copy is needed.
That is overly restrictive. See sample code given in this
thread, foo couldn't get the struct by ref in such a case if A
contains any indirection.
Not sure what you mean by A containing any indirections, but I'd
simply rewrite your example as follows:
void foo(const A a) { // byref passing desirable
bar(a); // bar's parameter is mutable => pass a copy (byval)
}
void bar(A a) { // byval passing
a.member = 5;
}