On Monday, 18 February 2013 at 07:46:24 UTC, kenji hara wrote:
Now, as for const, I don't think that the problem has been solved yet. We really need some sort of inferrence there, which is why a number of months
ago
I created this enhancement request for inferring inout:

http://d.puremagic.com/issues/show_bug.cgi?id=8407

AFAIK though, no one's even looked at it, so I don't think that it's had
any
effect as of yet. One of the compiler devs will need to take it up for it
to
make it in.

I think const must not be inferred for member function, because it affects to the function overloading. For example, the const-ness for class method will be inferred from base class overridden method with current compiler,
but it causes a serious problem.

http://d.puremagic.com/issues/show_bug.cgi?id=8366

Instead, you should declare two methods in generic code - one is mutable,
and another is const/inout.

Kenji Hara

I'll say upfront that I don't understand this problem completely, but I was trying to solve it anyway!

What bothers me is that the spec for 'inout' functions suggests that they generate the same runtime code, so it seems weird that there should have to be different vtable entries for the same code.

Following that thought, perhaps 'inout' class member functions could be treated specially in the case of classes. If the base class defines a method using inout,

class A
{
    bool foo(inout Object o) inout { return true; }
}

... it defines a single function in the vtable, which applies to mutable, const, and immutable. If a subclass then defines a mutable method, that function is added to the vtable for that class and all descendent classes. It must be defined with override, despite that it actually creates a new function underneath:

class B : A
{
    override bool foo(Object o) { return false; }
}

I am in the position of someone who knows he doesn't know everything he needs to know, but who doesn't want a good idea to go unmentioned either. Do you think this idea has merit?

Reply via email to