On Monday, 25 February 2013 at 18:23:52 UTC, Jonathan M Davis wrote:
What I find most odd is that DirEntry("foo") even compiles. It's not giving you DirEntry.init. It's giving you a DirEntry with its first field initialized (which happens to be its name, but that could theoretically change, since that's an implementation detail) but with every other field being its init
value. Basically

struct S
{
 int i;
 string s;
}

auto s = S(5);

compiles. I would have thought that the compiler would require that you provide every value if you were using an implicit constructor like that, but
apparently not.

[SNIP]

- Jonathan M Davis

No, that's just partial agglomerate construction, and has always worked that way. I think it works that way in C++ too, but I'm not sure (I seldom use POD in C++).

What I *am* surprised by though is that it also works with private fields. I'd have expected an "_name is private" compile error. I should create a bug entry, but I kind of expect walter to reply "works as intended"...

Since you are the one that refactored, what was the point of those _init functions? Wouldn't they have better worked as private constructors?

Reply via email to