Bug 499 – Multiple overrides of the destructor when using signals
Status
RESOLVED
Resolution
FIXED
Severity
blocker
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
x86
OS
Windows
Creation time
2006-11-13T03:39:00Z
Last change time
2014-02-15T13:18:41Z
Assigned to
bugzilla
Creator
samukha
Comments
Comment #0 by samukha — 2006-11-13T03:39:39Z
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.
Comment #1 by wbaxter — 2006-11-13T11:10:32Z
[email protected] 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: [email protected]
> ReportedBy: [email protected]
>
>
> 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
Comment #2 by samukha — 2006-11-13T13:20:41Z
On Tue, 14 Nov 2006 02:05:36 +0900, Bill Baxter <[email protected]>
wrote:
>[email protected] 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: [email protected]
>> ReportedBy: [email protected]
>>
>>
>> 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
Comment #3 by wbaxter — 2006-11-13T13:55:28Z
Max Samuha wrote:
> On Tue, 14 Nov 2006 02:05:36 +0900, Bill Baxter <[email protected]>
> wrote:
>
>
>>[email protected] 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: [email protected]
>>> ReportedBy: [email protected]
>>>
>>>
>>>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
Comment #4 by samukha — 2006-11-14T03:05:26Z
On Tue, 14 Nov 2006 04:54:04 +0900, Bill Baxter <[email protected]>
wrote:
>
>Ah, I see. Try moving your destrutor before the mixins.
>
>--bb
It works, thanks. But the bug should be fixed anyway