On 07/28/2014 10:23 PM, Brian Schott wrote:
On Monday, 28 July 2014 at 20:14:24 UTC, Timon Gehr wrote:
foreach(i;0..n){
// ...
}
(&x).foo();
try{
// ...
}catch(Exception e){
return e;
}
(new Exception("hi")).msg.writeln;
I don't see how these are ambiguous.
Both are ambiguous for the same reason. They are ambiguous because there
exist delegate/function literals of the form
enum e={ return 2; }();
^~~~~~~~~~~~~
an expression
The following program demonstrates how to disambiguate the code such
that it is parsed in the alternative way:
import std.stdio;
void bar(){
foreach(x;0..10)(){
// ...
}
(&x).foo();
}
void main(){
Exception e(){
try{
// ...
throw new Exception("foo");
}catch delegate(Exception e){
return e;
}(new Exception("hi")).msg.writeln;
return null;
}
e();
}