enum of struct not calling constructor
Jonathan M Davis
jmdavisProg at gmx.com
Tue Jan 18 09:26:23 PST 2011
On Tuesday, January 18, 2011 08:44:02 Andrej Mitrovic wrote:
> Example 1:
>
> import std.stdio;
>
> enum WindowSizes : QSize
> {
> Minimum = QSize(10)
> }
>
> struct QSize
> {
> int store;
> this(int x)
> {
> store = x + 10;
> }
> }
>
> void main()
> {
> auto foo = WindowSizes.Minimum;
> assert(foo.store == 10); // What?
>
> auto bar = QSize(10);
> assert(bar.store == 20);
> }
>
> It appears the constructor is never called for the enum. It does field by
> field assignments instead, just take a look at this case:
>
> import std.stdio;
>
> enum WindowSizes : Inverted
> {
> Minimum = Inverted(10, 20)
> }
>
> struct Inverted
> {
> int x;
> int y;
> this(int in_x, int in_y)
> {
> x = in_y;
> y = in_x;
> }
> }
>
> void main()
> {
> auto foo = WindowSizes.Minimum;
> assert(foo.x == 10);
> assert(foo.y == 20);
>
> auto bar = Inverted(10, 20);
> assert(bar.x == 20);
> assert(bar.y == 10);
> }
>
> As can be seen, this could be a potential source of bugs. Should I file it?
Absolutely.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list