On Thursday, 10 January 2013 at 17:46:54 UTC, Dmitry Olshansky
wrote:
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.
Still doesn't compile though...
And using "assertError" also still isn't as convenient as "assert"