On Wednesday, 30 January 2013 at 11:10:17 UTC, bearophile wrote:
Currently you are allowed to write a lambda literal as in line
3, but you can't omit "ref" as in line 4:
void foo(int delegate(ref int[1]) spam) {}
void main() {
foo((ref x) => 0); // line3, OK
foo(x => 0); // line4, Error
}
Do you think "ref" annotation should be required at the call
site?
Ref isn't at a call site, it is a function declaration and not
passing lambda by ref.
This is the Bugzilla thread. Hara has already implemented the
"ref" inference, but he's not sure if it's a good idea:
http://d.puremagic.com/issues/show_bug.cgi?id=9423
Bye,
bearophile
int delegate(ref int[1] spam) and
int delegate(int[1] spam) are different.
True, the proposal makes code writing convenient, but it can lead
to troubles when foo has overload with non-ref parameter
delegate. This also may probably lead to problems when passed by
delegate function modifies its argument but it is unexpected by
user because function was not annotated with ref. Moreover, this
is a special case in a language.