On Wednesday, 27 February 2013 at 10:38:05 UTC, Timon Gehr wrote:
I considered optional parentheses where you would have an
error, but I'm
afraid that this could create weird effect with function
overloads.
There are no weird effects with function overloads in what I
propose. What is the issue you are seeing?
Consider the following situation :
void foo(uint a) {
writeln("a is ", a);
}
uint bar() {
return 0;
}
foo(bar); // a is 0
Later, this function is added :
void foo(uint function() a) {
writeln("function not executed");
}
The statement above become :
foo(bar); // function not executed
Note that foo can be in other modules, so it may not be obvious.
It can be solved in various ways, and I actually implemented some
to play around. I was not satisfied with the result.
It may be limited to the case where expression can't be used as
statement because it has no effect.
Then it is not worth it.
It would kick in with the example you gave.