toString contains null for struct with function/method
Paul Backus
snarwin at gmail.com
Sun Apr 8 15:51:05 UTC 2018
On Sunday, 8 April 2018 at 15:04:49 UTC, number wrote:
> the write() shows a 'null' if the struct has a function/method.
> why is that?
> ```
> import std.stdio;
>
> void main()
> {
> struct S
> {
> int i;
> }
> S s;
> writeln(s); // S(0)
> writeln(typeid(s).sizeof); // 8
>
> struct S2
> {
> int i;
> this(this){}
> }
> S2 s2;
> import std.conv: to;
> writeln(s2); // S2(0, null)
> writeln(typeid(s2).sizeof); // 8
> }
> ```
S2 is a nested struct [1], which means it has a hidden pointer
field that's used to access its enclosing scope. If you change
the definition to `static struct S2`, you'll get the same output
for both structs.
[1] https://dlang.org/spec/struct.html#nested
More information about the Digitalmars-d-learn
mailing list