digitalmars.D.learn - enum of struct not calling constructor
- Andrej Mitrovic (47/47) Jan 18 2011 Example 1:
- Jonathan M Davis (3/63) Jan 18 2011 Absolutely.
- Andrej Mitrovic (1/1) Jan 18 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5460
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?
Jan 18 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
Jan 18 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5460
Jan 18 2011









Jonathan M Davis <jmdavisProg gmx.com> 