[Issue 499] New: Multiple overrides of the destructor when using signals

Max Samuha maxter at i.com.ua
Mon Nov 13 11:19:07 PST 2006


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




More information about the Digitalmars-d-bugs mailing list