[Issue 11080] assert(`string`) should be forbidden

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Sep 21 10:52:18 PDT 2013


http://d.puremagic.com/issues/show_bug.cgi?id=11080



--- Comment #11 from Maxim Fomin <maxim at maxim-fomin.ru> 2013-09-21 10:52:16 PDT ---
(In reply to comment #9)
> (In reply to comment #8)
> > This may be a separate issue. For example, the problem you pointed out can be
> > solved by rewriting array conditional evoluation to return length and not ptr
> > which still technically allows to write assert(""). In such case this isssue
> > still has some value.
> 
> I don't really such much value in banning string literals in asserts. For
> starters, it is awfully specific. Second, I have trouble seeing why literals
> get such a special treatment, when "assert(format("error"))" is just as
> "wrong". It'd be creating new rules to catch an error that virtually never
> happens anyways, and catches it un-reliably to boot.

Assert("string") is a bug. There should be no discussion here. format("error")
is not an array literal, so it is irrelevant.

> Finally, a valid use case I can see would be a user wanting to check that an
> empty string *actually does* implicitly evaluate to non null:
> static assert ("", "Error! string to bool evaluation rules have changed!");

Ideally this should be documented and not be a subject to change. Anyway, one
can test ptr and length properties.

> Chances are `assert("hello")` was wrong useage yes, but I think it hardly
> warrants new language rules...

Assert("hello") is an uncoditional bug -  no need to calculate any chances.

> ...rules you wouldn't be able to apply to normal functions. For example an
> "enforce" that refuses array literals. Can't happen.

Enforce is irrelevant.

> A good rule of thumb is that if a built-in can do it, so should a user-built.
> This would not be the case for this new rule.

Built-in can not, but user-built can. This does not get into a conflict with
"if a built-in can do it, so should a user-built". (Arguments based on rules of
thumb coming from nowhere are hard to value). Contra point - dmd rejects some
potentially broken code, for example 'l' suffix for integer literal and
assignment in condition evaluation - which even is not necessarily a bug.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list