assert(false) in release == splinter in eye
Tomek Sowiński
just at ask.me
Sun Oct 10 14:22:38 PDT 2010
Christopher Bergqvist napisał:
> Hi,
>
> Time for some Sunday nitpicking. While reading TDPL, one thing that stuck
> out to me was the special behavior of assert(false). Consider the
> following program compiled with "-release".
>
> void main()
> {
> int a = 0;
> assert(a);
> }
>
> That program will run without errors. Changing the type of variable a from
> "int" to "enum" results in the program segfaulting thanks to the compiler
> being able to know the value of the expression "a" at compile time and
> inserting a HLT/"halt" instruction. Having the ability to change something
> subtle in a more complex expression or series of expressions without
> realizing you made a compile time assert(false) which crashes your program
> feels ugly.
>
> I would prefer it if assert() didn't have this special type of behavior,
> and that a "halt" keyword or equivalent was introduced. What do you think?
I have the same feeling. 'halt' is good, 'fail' is good too. It doesn't have to be a keyword, a
function in object.d would suffice.
BTW, does anybody know the reason for the assert(0) infernal syntax?
--
Tomek
More information about the Digitalmars-d
mailing list