Assigning a scope variable to an outer-scope variable is allowed?

Gregor Richards Richards at codu.org
Wed Jul 4 02:54:49 PDT 2007


のしいか (noshiika) wrote:
> Hello. I have a question about "scope" variables.
> 
> I've understood that it is not allowed to copy a scope variable or a 
> scope parameter to outside of the scope. But, the following code 
> compiles without any warnings or errors, and of course, causes a runtime 
> error.
> 
> Is this just a bug?
> 
> //----
> 
> class C {
>     ~this() { writefln("dtor"); }
>     void func() { }
> }
> void main() {
>     C a;
>     {   scope C b = new C;
>         a = b;
>     } // dtor
>     if(a !is null) a.func(); // Error: Access Violation
> }
> 
> const(int[]) g;
> void foo(in int[] a) { // in == final const scope
>     g = a;  // a is scope?
> }

Assigning a scope object to a variable which is not in that scope is 
valid, it's just usually stupid. One use where it's necessary (though a 
bit unclean) is if you have a global variable which you want to 
temporarily set to a scope object. You set it at the beginning of your 
scope, then reset it at the end, so it's never referring to an invalid 
object.

That is to say: You're right, that's not allowed. But it's not allowed 
due to it being impossible at /runtime/, not any problems at /compile/ 
time. And adding a warning would make legit uses a PITA.

  - Gregor Richards



More information about the Digitalmars-d mailing list