www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - .init of field == type's initializer or field initializer?

reply Andrej Mitrovic <none none.none> writes:
From: http://d-programming-language.org/property.html
.init Property:
".init produces a constant expression that is the default initializer. If
applied to a type, it is the default initializer for that type. If applied to a
variable or field, it is the default initializer for that variable or field.
For example: "

struct Foo
{
    int a;
    int b = 7;
}

Foo.a.init	// is 0
Foo.b.init	// is 7

Foo.b.init is actually 0. Are the docs wrong, or is the compiler wrong? Let me
know so I can fix the docs if necessary as I'm doing that now.
May 19 2011
next sibling parent Jonathan M Davis <jmdavisProg gmx.com> writes:
On 2011-05-19 20:19, Andrej Mitrovic wrote:
 From: http://d-programming-language.org/property.html
 .init Property:
 ".init produces a constant expression that is the default initializer. If
 applied to a type, it is the default initializer for that type. If applied
 to a variable or field, it is the default initializer for that variable or
 field. For example: "
 
 struct Foo
 {
     int a;
     int b = 7;
 }
 
 Foo.a.init	// is 0
 Foo.b.init	// is 7
 
 Foo.b.init is actually 0. Are the docs wrong, or is the compiler wrong? Let
 me know so I can fix the docs if necessary as I'm doing that now.

import std.stdio; import std.string; struct Foo { int a; int b = 7; } void main() { assert(Foo.init.a == 0); assert(Foo.init.b == 7); assert(Foo.a.init == 0); assert(Foo.b.init == 0); } This runs and passes. It is correct. I believe that you are confusing Foo.init.b and Foo.b.init. The value of b for Foo.init is 7, but the init value for an int is always 0. - Jonathan M Davis
May 19 2011
prev sibling next sibling parent Andrej Mitrovic <andrej.mitrovich gmail.com> writes:
It was in the docs like that actually.
May 19 2011
prev sibling next sibling parent Jonathan M Davis <jmdavisProg gmx.com> writes:
On 2011-05-19 22:51, Andrej Mitrovic wrote:
 It was in the docs like that actually.

Well, then it's an error in the docs. Foo.init should have its member variables initialized to what they were directly initialized to, but that shouldn't affect the default initializers of the types of the member variables. - Jonathan M Davis
May 19 2011
prev sibling parent Stewart Gordon <smjg_1998 yahoo.com> writes:
On 20/05/2011 04:19, Andrej Mitrovic wrote:
<snip>
 Foo.b.init is actually 0. Are the docs wrong, or is the compiler wrong? Let me
know so
 I can fix the docs if necessary as I'm doing that now.

Known issue: http://d.puremagic.com/issues/show_bug.cgi?id=5715 Stewart.
May 21 2011