The Right Approach to Exceptions

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sun Feb 19 06:41:42 PST 2012


On 2/19/12 7:31 AM, Timon Gehr wrote:
> On 02/19/2012 09:26 AM, H. S. Teoh wrote:
>> On Sat, Feb 18, 2012 at 11:52:00PM -0800, Jonathan M Davis wrote:
>> [...]
>>> So, while at first glance, it seems like a good idea, I think that it
>>> has too many issues as-is to work. It might be possible to adjust the
>>> idea to make it workable though. Right now, it's possible to do it via
>>> mixins or calling a function inside the catch, but doing something
>>> similar to this would certainly be nice, assuming that we could sort
>>> out the kinks.
>> [...]
>>
>> I have an idea. What about "signature constraints" for catch, ala
>> template signature constraints? Something like this:
>>
>> try {
>> ...
>> } catch(IOException e)
>> if (e.errno in subsetYouWantToHandle)
>> {
>> ...
>> }
>>
>> Just using IOException as an example. The idea is to allow arbitrary
>> expressions in the constraint so whatever doesn't satisfy the constraint
>> will be regarded as "not caught", even if the base type matches.
>>
>>
>> T
>>
>
> Nice.

That helps. This quite nicely illustrates that types don't necessarily 
need to proliferate. Something not much more constraining can be done today:

try {
   ...
} catch(IOException e)
{
   if (e.errno !in subsetYouWantToHandle) throw e;
   ...
}


Andrei


More information about the Digitalmars-d mailing list