On Friday, 25 May 2018 at 10:45:23 UTC, Steven Schveighoffer
wrote:
On 5/24/18 4:24 PM, IntegratedDimensions wrote:
What I'd like to do is
class C : A
{
private override @property TT t() { return cast(TT)(_t); }
// null check if necessary
// Stuff below uses t which is now a TT
...
}
It should work, you are allowed covariant overloads. However,
private functions are not virtual, you need to make them at
least protected.
-Steve
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; }
object.Error@(0): Access Violation
----------------
0x004850C8
0x00485C96
0x0043E22A
0x0047FB50
0x0046109A
0x0052401A
0x77D0B605 in LdrQueryProcessModuleInformation
0x77D11D02 in RtlQueryProcessLockInformation
0x77D11705 in RtlQueryProcessDebugInformation
0x77CA47DF in RtlAllocateHeap
While my specific use case is far more complex in design, the
original essentially boils down to the dpaste I gave. Probably
won't spent any time on it since I do not need the setter in this
case(can use the field directly). But a bug is probably related
to the code that fixed the "original bug" and possibly windows.
What I do know is that 2.75 did not produce this access violation
and it was the same code(I just uncommented out the setter).
The original dpaste code that did pass, I though, doesn't seem to
pass now. I thought it was working for 2.80 and so I changed it
to 2.69 and it failed but I might have made a mistake or the page
lagged.
Either way, maybe you have a clue for future reference.