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