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;
}

Reply via email to