Hello,

I tried to narrow the problem and make a small example, but I've failed.

I try to describe the syndrome, maybe someone knows about it.
(I heard that @properties are not 100% functional, maybe it's because of that, I dunno...)

With pragma msg, I verify the time of things:

karcSamples
This is a class, I create it from a class template, which has a lot of template mixins inside.

karcSamples[key]
The type of this is a RecordAccessor struct, which is a Voldemort struct inside a function. That function is called by karcSamples.opIndex(key).

karcSamples[key].lod0
The type of this is BlobLoader
'lod0' is a mixin generated @property getter. It calls a template function in the karcSamples class: _getBlob!"lod0"(key) this also calls an internal struct called DataLoggerBlobAA which is acting like an associative array. That iternal struct overloads the opBinary!"in" operator and returns a BlobLoader struct.

karcSamples[key].lod0._size -> _error_ void has no property ._size But this is weird, because BlobLoader actually HAS a @property called _size.

karcSamples[key].lod0()
The type of this is also BlobLoader. I have a feeling, that karcSamples[key].lod0 only returns a function pointer (the property function) which is implicitly evaluated, except when I use the ._size thing to evaluate a property.

karcSamples[key].lod0()._size
And this finally works, but it's ugly.

Anyone knows how to eliminate that extra () from there? The typeof() is works good for it, but the actual compilation thinks it's "void", not the BlobLoader struct reported by typeof(). Only the extra () let it compile successfuly.

Reply via email to