Parens

Dee Girl deegirl at noreply.com
Fri May 9 22:51:21 PDT 2008


Janice Caron Wrote:

> On 10/05/2008, Dee Girl <deegirl at noreply.com> wrote:
> >  void main(string[] args)
> >  {
> >     auto c = new const C;
> >  }
> >
> >  Does not compile. But if I change to const(C) it does compile. It is a bit unusual that parens make such a big difference. Thank you, Dee Girl
> 
> When it comes to parens-version versus non-parens-version, it's not
> really a problem if one of the two doesn't compile. It would be a
> bigger problem if both compile, but behave differently.
> 
> But I agree with you. "new const C" should behave like "new const(C)".
> 
> However, what you probably should have written is:
> 
>     const c = new C;
> 
> because "auto" is what you use in the absence of any other attribute.
> In this case, it suffices to create a new C, and then assign it to a
> const-thereafter variable.

I respectfully disagree, Janice-san. The const subject is of big interest to me and I read many times on the website about it. I think in general it is better to write new const(C) but not new C and then use it to assign a const. It is similar to invariant(C) and it is impossible to construct a new C and then assign it to invariant(C) object. In Andres document from ACCU he shows how invariant constructor must know that object being constructed is invariant. And the same a const constructor could know that the object being constructed is const and use that information. Thank you, Dee Girl



More information about the Digitalmars-d mailing list