DIP1000: Scoped Pointers
Mike via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Tue Aug 16 23:44:41 PDT 2016
On Wednesday, 17 August 2016 at 04:28:33 UTC, Rory McGuire wrote:
> Basically DIP1000 makes it so that:
>> void main()
>> {
>> A obj;
>> {
>> scope A a = new A(1);
>> obj = a;
>> }
>> assert(obj.x == 1); // fails, 'a' has been destroyed
>> }
>
> Will not compile.
Ok, that makes sense. But then the feature illustrated on the
deprecations page is wrong. I think what has been deprecated is
`scope` as a type modifier, not `scope` as a storage class, but
the example on the deprecations page illustrates the `scope`
storage class, not the type modifier.
I believe what the deprecations page intended to say was that
this has been deprecated:
scope class A
{
this(int x) { }
}
And DIP1000 finally implements the `scope` storage class properly:
void main()
{
A obj;
{
scope A a = new A(1);
obj = a; // compile-time error. Good!
}
assert(obj.x == 1); // or is it usage that triggers the
compile-time error?
}
Mike
More information about the Digitalmars-d-announce
mailing list