Throwing specific Error Obejct for asserts

Dmitry Olshansky dmitry.olsh at gmail.com
Thu Jan 10 09:46:46 PST 2013


10-Jan-2013 20:11, monarch_dodra пишет:
> On Thursday, 10 January 2013 at 15:54:21 UTC, Andrei Alexandrescu wrote:
>> On 1/10/13 6:23 AM, monarch_dodra wrote:
>>> So question: Why don't we have, just like for enforce, the possibility
>>> of simply writing:
>>> //----
>>> assert(i <= j, new RangeError());
>>> //----
>>
>> Define another function...?
>>
>> Andrei
>
> Well, I would. I'd write an overload, but I can't, because assert is
> built-in.
>
> I'd have to provide a new name (such as assertError). This would not be
> as convenient as having an overload. That, and a library function can't
> match assert's built-in functionality. For example:
>
> //----
> struct S()
> {
>    version(assert)
>      bool isValid = false; //debug only variable
>
>    void foo()
>    {
>      assertError(isValid, new RangeError()); //HERE
>    }
> }
> //----
>
> The problem is that at best, assertError can be a noop-implementation in
> release, but the call is still there. The first argument will still get
> evaluated. Further more, it may not even compile...

lazy keyword to the rescue.

-- 
Dmitry Olshansky


More information about the Digitalmars-d mailing list