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