May 18, 2004 Mixin bug | ||||
---|---|---|---|---|
| ||||
template Mix1() { this(int x) { printf("mix1\n"); }} class Bar { int myx; //~ mixin Mix1; ==> wouldn't compile this() { myx = 15; } mixin Mix1; ==> placing it here compiles } int main() { Bar bar = new Bar(); return 0; } |
May 18, 2004 Re: Mixin bug | ||||
---|---|---|---|---|
| ||||
Posted in reply to Roel Mathys | On Tue, 18 May 2004 08:29:27 +0200, Roel Mathys wrote: > template Mix1() { this(int x) { printf("mix1\n"); }} > > class Bar > { > int myx; > //~ mixin Mix1; ==> wouldn't compile > > this() { myx = 15; } > > mixin Mix1; ==> placing it here compiles > } > > int main() { > Bar bar = new Bar(); > return 0; > } Confirmed, sort of... With this code ... //---------------------- template Mix1(alias y) { this(int x) { y = x; printf("mix1\n"); } } class Bar { int myx; this() { myx = 15; } //mixin Mix1!(myx); // ==> placing it here compiles this(int x) { myx = x; printf("mix2\n");} } int main() { Bar bar1 = new Bar(); Bar bar2 = new Bar(4); printf("1 %d, 2 %d\n", bar1.myx, bar2.myx); return 0; } //---------------------- I get ... c:\temp>dmd mix C:\DPARNELL\DMD\BIN\..\..\dm\bin\link.exe mix,,,user32+kernel32/noi; c:\temp>mix mix2 1 15, 2 4 ... but when I replace the hard coded ctor(int) with the mixin ... //---------------------- template Mix1(alias y) { this(int x) { y = x; printf("mix1\n"); } } class Bar { int myx; this() { myx = 15; } mixin Mix1!(myx); // ==> placing it here compiles //this(int x) { myx = x; printf("mix2\n");} } int main() { Bar bar1 = new Bar(); Bar bar2 = new Bar(4); printf("1 %d, 2 %d\n", bar1.myx, bar2.myx); return 0; } //---------------------- ... I get this ... c:\temp>dmd mix mix.d(17): constructor this () does not match argument types (int) So it appears that any ctor brought in by a mixin is ignored if any ctor already exists for the class. -- Derek 18/May/04 6:28:40 PM |
Copyright © 1999-2021 by the D Language Foundation