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