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