On Sun, 12 Jun 2011 23:58:01 -0400, Mehrdad <wfunct...@hotmail.com> wrote:

== Quote from Steven Schveighoffer (schvei...@yahoo.com)'s article
On Sun, 12 Jun 2011 23:36:21 -0400, Mehrdad <wfunct...@hotmail.com> wrote:
> An idea came to my mind for fixing the const/rebindable issue, and I'm
> not sure if it's a good idea or not but I thought I'd mention it. I'm
> not sure if it's been mentioned before, but a quick search didn't make
> it seem like it has been.
It has been brought up, a long time ago, by me on the phobos mailing list
(the idea to just assume const(Object) is rebindable, not the final
thing). I think it was on the ML that Andrei maintained, so it's archive
is gone.
I had the exact same thoughts as you, and Walter found a perfectly
iron-clad reason why it doesn't work.  I can't say I remember the exact
reason (maybe he does off the top of his head), but it definitely killed
the idea quite well. So it doesn't work unfortunately :( I know the lack
of reference/reason is unsatisfying, but I hope you can trust me that to
pursue this is not going to go anywhere, and I don't want to re-argue it
again...
-Steve

No problem, I won't. :) But if you remember the reason, please post it since I'm curious!

I'll see if it's in my sent mail...

OK, I found it, it was actually the same logic but applied to shared objects. But Walter convinced me that the issues are the same (at least for this problem).

Consider this type:

struct S
{
   Object o;
}

now, we have these two variables:

const(S) s;
const(Object) o;

finally, the issue:

void kryptonite(ref const(Object) o)
{
   o = new Object();
}

kryptonite(o); // fine
kryptonite(s.o);// oops!

The problem is, there isn't a way to distinguish a tail-const object reference from a fully const object reference, yet both types can exist. If you want to pass a reference to such a reference, then you run into sticky issues like this one.

I understand that you want final to mean "head const", but final is a storage class, not a type modifier -- it cannot be used as part of the type info.

-Steve

Reply via email to