DIP65: Fixing Exception Handling Syntax

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Mon Jul 28 13:51:54 PDT 2014


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



More information about the Digitalmars-d mailing list