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...