x.RC.__postblit () is not callable using argument types () const
Dan
dbdavidson at yahoo.com
Tue Feb 5 04:35:24 PST 2013
On Tuesday, 5 February 2013 at 11:51:40 UTC, Maxim Fomin wrote:
> On Tuesday, 5 February 2013 at 04:03:06 UTC, Andrej Mitrovic
> wrote:
>> Yeah, it's still not very helpful. And I have no idea where
>> "Slot" comes from.
>
> This is sub struct inside object.AssociativeArray.
Is it the case that this is a D compiler (or library) problem and
there is no issue with the code? Or is there really a problem
with it that I am not seeing? I gather from the responses the
code looks fine, otherwise any misunderstanding would come up
quickly.
I feel like I have painted myself in a corner a bit. I love D's
templates and am a fan of the compile time reflection. I have
mixins that support things like OpEquals, OpCmp, toHash, etc. I
try very hard to work with const correctly.
mixin template OpEquals() {
bool opEquals(const ref typeof(this) other) const {
return typesDeepEqual(this, other);
}
bool opEquals(const typeof(this) other) const {
return typesDeepEqual(this, other);
}
}
This OpEquals in the sample was just this signature (which I have
mixed in all over successfully) but with a 'return true'. I think
this is the correct signature to use. If I understand correctly,
were I to remove the const, then const instances may no longer
call it - which is not a good change.
Transitive const is more than just simple const, and obviously
more is better ;-). Since "Slot" is mentioned and
"object.AssociativeArrray" it sounds like there may be a
const-correctness issue with associative array itself rather than
this code? Before the move to 2.061 I had to cast away const on
const(V[K]) to get length and to iterate over them. But why the
link between History!double and RC[int] when they are totally
unrelated? Well, the only relation is their aggregation in
BSItem. Baffling.
Any suggestions appreciated.
Thanks
Dan
More information about the Digitalmars-d-learn
mailing list