Voldemort structs no longer work?
Jonathan M Davis
jmdavisProg at gmx.com
Sat Dec 15 11:31:22 PST 2012
On Saturday, December 15, 2012 19:50:34 Iain Buclaw wrote:
> On Saturday, 15 December 2012 at 18:38:29 UTC, H. S. Teoh wrote:
> > With latest git dmd:
> > auto makeVoldemort(int x) {
> >
> > struct Voldemort {
> >
> > @property int value() { return x; }
> >
> > }
> > return Voldemort();
> >
> > }
> > void main() {
> >
> > auto v = makeVoldemort();
> > writeln(v.value);
> >
> > }
> >
> > Compile error:
> > test.d(3): Error: function test.makeVoldemort.Voldemort.value
> >
> > cannot access frame of function test.makeVoldemort
> >
> > Changing 'struct' to 'class' works. Is this deliberate, or is
> > it a bug?
> > It is certainly inconsistent with Walter's article on Voldemort
> > types,
> > which uses structs as examples.
> >
> >
> > T
>
> Pretty certain it's deliberate. No closure is created for nested
> structs to access it's parent, complying with it's POD behaviour.
static nested structs don't have access to their outer scopes. Non-static
structs do. This reeks of a bug.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list