On Friday, 3 October 2014 at 20:28:21 UTC, H. S. Teoh via Digitalmars-d wrote:
On Fri, Oct 03, 2014 at 08:02:14PM +0000, monarch_dodra via Digitalmars-d wrote:
On Friday, 3 October 2014 at 19:21:38 UTC, Dmitry Olshansky wrote:
>03-Oct-2014 23:08, Ali Çehreli пишет:
>>I know that assert is not a function but it would be nice to >>have.
>>
>
>Indeed. If we make it a function and put in object.d would >anyone
>notice the change?

I think there are semantics that prevent that. Such as "assert(0)", or
removing the evaluation of arg in "assert(arg())" altogether in
release.

        void assert(lazy bool exp) {
                version(assert) // (!)
                        if (!exp) __fatal_runtime_error();
        }

Doesn't work for assert(0); but does work for not evaluating the
argument in release build. (Yeah I know, implementation of 'lazy' leaves a lot to be desired, but hey, that can be argued to be a QOI issue.)


T

There might still be an issue in regards to linking though: I have some code where assert-only functions are only defined for non-release.

Reply via email to