digitalmars.D.learn - .init of field == type's initializer or field initializer?
- Andrej Mitrovic (11/11) May 19 2011 From: http://d-programming-language.org/property.html
- Jonathan M Davis (19/37) May 19 2011 import std.stdio;
- Andrej Mitrovic (1/1) May 19 2011 It was in the docs like that actually.
- Jonathan M Davis (6/7) May 19 2011 Well, then it's an error in the docs. Foo.init should have its member
- Stewart Gordon (5/7) May 21 2011 Known issue:
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
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
It was in the docs like that actually.
May 19 2011
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
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