On Thursday, 23 May 2013 at 13:52:49 UTC, Steven Schveighoffer wrote:
On Thu, 23 May 2013 05:05:01 -0400, Don <turnyourkidsintoc...@nospam.com> wrote:

On Tuesday, 21 May 2013 at 20:36:20 UTC, Walter Bright wrote:

Join the dmd beta mailing list to keep up with the betas. This one is pretty much good to go, unless something disastrous crops up.

http://ftp.digitalmars.com/dmd2beta.zip

Remaining regressions:

http://d.puremagic.com/issues/buglist.cgi?query_format=advanced&bug_severity=regression&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED

NO NO NO NO. I am violently opposed to this release.

This beta contains the worst language misfeature of all time. It's silently snuck in under the guise of a bugfix.


struct S
{
    const int x = 7;
    int y;
}

In previous releases, S.x was always 7.
But now, if you write

S s = S(5);

then x gets changed to 5.
This means that the const variable x has been initialized TWICE!

This new behaviour is counter-intuitive and introduces a horrible inconsistency.

I disagree.

struct S
{
     const int x;
}

S s1; // x is 0


Of course! It's an uninitialized variable! Try making x a float, and you'll get NaN.

S s2 = S(5); // x is 5

---
I can see uses. If you don't want x.init to be the default for x, then you need to set it to something else.

For example:

struct Widget
{
   immutable string name = "(unset)"; // instead of ""
}

That is just an awful workaround for the lack of default constructors.

Reply via email to