DIP53 and DIP49 (ver2) - New definitions for qualified constructors and postblits
    Kenji Hara 
    k.hara.pg at gmail.com
       
    Thu Dec 19 18:39:58 PST 2013
    
    
  
2013/12/20 Michel Fortin <michel.fortin at michelf.ca>
> But what if your struct has a class-typed member:
>
>         struct A {
>                 Object o;
>                 int* a;
>
>                 this(this) {
>                         a = new int;
>                         o = new Object;
>                 }
>
>                 this(this) immutable {
>                         a = new immutable(int);
>                         o = new immutable(Object); // will that work?
>                 }
>         }
>
> On the second postblit, the type of "a" has to be "immutable(int)*" to
> allow you to assign something else to the pointer while not being able to
> affect what's at the other end of the indirection.
>
> So then, what is the type of "o"? Again, you need to be able to assign the
> variable while not affecting what is at the other end of the indirection.
> You need a tail-immutable object reference, which doesn't exist.
That's already resolved "design issue" from 2.064, by fixing issue 9665.
http://d.puremagic.com/issues/show_bug.cgi?id=9665
Inside constructor, first occured field assignment is automatically handled
as the field initializing.
struct A {
    Object o;
    int* a;
    this(int) immutable {
        a = new immutable(int);
        // is exactly same as: immutable int* a = new immutable(int);
        o = new immutable(Object);
        // is exactly same as: immutable(Object) o = new immutable(Object);
    }
Inside postblit, the same rule should be applied.
    this(this) immutable {
        a = new immutable(int);
        // is exactly same as: immutable int* a = new immutable(int);
        o = new immutable(Object);
        // is exactly same as: immutable(Object) o = new immutable(Object);
    }
Unfortunately postblit case does not work. I can say it's definitely a
compiler bug.
http://d.puremagic.com/issues/show_bug.cgi?id=11292
However, I'm purposely delaying to fix the bug, because of DIP49.
Kenji Hara
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20131220/ae7782b6/attachment.html>
    
    
More information about the Digitalmars-d
mailing list