[Issue 499] New: Multiple overrides of the destructor when using signals
Bill Baxter
wbaxter at gmail.com
Mon Nov 13 11:54:04 PST 2006
Max Samuha wrote:
> On Tue, 14 Nov 2006 02:05:36 +0900, Bill Baxter <wbaxter at gmail.com>
> wrote:
>
>
>>d-bugmail at puremagic.com wrote:
>>
>>>http://d.puremagic.com/issues/show_bug.cgi?id=499
>>>
>>> Summary: Multiple overrides of the destructor when using signals
>>> Product: D
>>> Version: 0.173
>>> Platform: PC
>>> OS/Version: Windows
>>> Status: NEW
>>> Severity: blocker
>>> Priority: P2
>>> Component: DMD
>>> AssignedTo: bugzilla at digitalmars.com
>>> ReportedBy: maxter at i.com.ua
>>>
>>>
>>>The following gives 'test.d(233): function test.Test.Signal!(Args)._dtor
>>>multiple overrides of same function':
>>>
>>>import std.stdio, std.signals;
>>>
>>>class Args
>>>{
>>> int foo;
>>>}
>>>
>>>class Base
>>>{
>>> ~this()
>>> {
>>> writefln("Base dtor!");
>>> }
>>>}
>>>
>>>class Test : Base
>>>{
>>> mixin Signal!(Args) A;
>>> mixin Signal!(Args) B;
>>>
>>> ~this()
>>> {
>>> writefln("Test dtor");
>>> }
>>>}
>>>
>>>
>>>void main()
>>>{
>>> auto test = new Test;
>>>}
>>>
>>>//------------------------------
>>>
>>>The code compiles ok, if there is no base class or no destructor in the base
>>>class.
>>>
>>>
>>
>>This is already fixed in the version of std.signals here:
>>http://www.digitalmars.com/d/phobos/signals.d
>>
>>--bb
>
>
> It's not. The problem is not with signals but with mixed in
> destructors
>
> template TDtor()
> {
> ~this()
> {
> writefln("Mixed-in dtor");
> }
> }
>
> class Base
> {
> ~this()
> {
> writefln("Base dtor");
> }
> }
>
> class Test : Base
> {
> mixin TDtor A;
> mixin TDtor B;
>
> ~this()
> {
> writefln("Test dtor");
> }
> }
>
> void main()
> {
> auto test = new Test;
> }
>
> If i get it right, this should compile and output:
>
> Test dtor
> Mixed-in dtor
> Mixed-in dtor
> Base dtor
>
Ah, I see. Try moving your destrutor before the mixins.
--bb
More information about the Digitalmars-d-bugs
mailing list