important proposal: scope keyword for class members

John Simon zildjohn01 at gmail.com
Sun Mar 8 15:12:49 PDT 2009


Sean Kelly Wrote:

> John Simon wrote:
> > Sean Kelly Wrote:
> >>
> >> Oh, I should mention that I'm not sure how the compiler would handle 
> >> this scenario:
> >>
> >> class A { byte[16]; }
> >> class B { byte[32]; }
> >> class C {
> >>      this( bool b ) {
> >>          if( b ) o = new A;
> >>          else    o = new B;
> >>      }
> >>      scope Object o;
> >> }
> >>
> >> If I had to guess I'd say that the compiler would either reserve the max 
> >> size necessary to store both A or B, or that in non-trivial cases it 
> >> just wouldn't bother with reserving space for o at all.
> > 
> > Wrong. The Object is constructed when it comes into scope, and destructed when it leaves scope. Classes can't have an 'opAssign', instead the reference is reassigned. Since the reference is invariant/immutable here, this throws a compile time error.
> 
> I'm talking about a proposed new feature, not an existing one.  Please 
> take this example in context.

Sorry man, I thought you were disputing with me. My apologies. Let me rephrase.

I believe that 'scope' declared objects shouldn't allow an assignment of a derived type. Reasoning being that there wouldn't be enough stack space allocated for it.

So in your example above, Object could only recieve a 'new Object', and nothing further down in the hierarchy.



More information about the Digitalmars-d mailing list