On 5/25/18 4:02 PM, IntegratedDimensions wrote:
So, I upgraded everything, tried to add the setter and get an compile
time access violation:
override @property T t(T v) { _t = v; return v; }
Changing T v to TT v gives the violation
override @property T t(TT v) { _t = v; return v; }
Parameters work the opposite way as return values. That is, you can't
override a base class's function that accepts a base type with one that
accepts a derived type. This is because you must be able to call the
virtual function with the base type, and this would not work.
So what is technically possible is to call an overridden function with a
base type (i.e. override a function that accepts a TT with one that
accepts a T), but I don't know if D allows this, and obviously it
doesn't help with your use case.
object.Error@(0): Access Violation
----------------
0x004850C8
0x00485C96
0x0043E22A
0x0047FB50
0x0046109A
0x0052401A
0x77D0B605 in LdrQueryProcessModuleInformation
0x77D11D02 in RtlQueryProcessLockInformation
0x77D11705 in RtlQueryProcessDebugInformation
0x77CA47DF in RtlAllocateHeap
Hm... this is a runtime stack trace. And a crappy one at that (very
little info at the top of the stack).
If you are getting this at compile time, then it's the compiler having
an issue, which is automatically a bug (compiler should never throw an
error).
If you have a reduced test case, I'd recommend filing an issue, and
tagging it with ICE. But it needs to be reproducible.
-Steve