No TypeTuple expansion for assert?
monarch_dodra via Digitalmars-d
digitalmars-d at puremagic.com
Sat Oct 4 12:58:16 PDT 2014
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.
More information about the Digitalmars-d
mailing list