[Issue 22270] [DIP1000] class does infer scope in methods when assigned to a scope variable

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Sep 3 11:58:06 UTC 2021


Dennis <dkorpel at live.nl> changed:

           What    |Removed                     |Added
             Status|NEW                         |RESOLVED
                 CC|                            |dkorpel at live.nl
           Hardware|x86_64                      |All
         Resolution|---                         |INVALID
                 OS|Linux                       |All

--- Comment #1 from Dennis <dkorpel at live.nl> ---
Neither method gets `scope` inferred. If you remove the `new` in Bar (`scope
bar = Bar;`) you'll get the same error for the struct. What's happening is that
since `Bar` is a pointer, it gets dereferenced implicitly:

void main()
    scope Bar* bar = new Bar;
    (*bar).dummy; // dereference strips away the scope layer
`dummy` can't escape the pointer `bar` since `this` is passed by `ref`.
Escaping a pointer to a ref variable (`&this`) is fixed by

The class case is not allowed since dummy can do this:

Foo globalFoo;
class Foo
    @safe void dummy() {
        globalFoo = this;

So they are not consistent because `struct` is a value type and `class` a
reference type.


More information about the Digitalmars-d-bugs mailing list