[Issue 5460] New: enum of struct not calling constructor

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Jan 18 09:38:39 PST 2011


http://d.puremagic.com/issues/show_bug.cgi?id=5460

           Summary: enum of struct not calling constructor
           Product: D
           Version: D1 & D2
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: andrej.mitrovich at gmail.com


--- Comment #0 from Andrej Mitrovic <andrej.mitrovich at gmail.com> 2011-01-18 09:36:41 PST ---
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);
}

The constructor is never called for the enum. It does field by field
assignments instead, as shown in 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);
}

Field assignments should be disabled when a constructor is present.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list