[Issue 1860] New: Heap construction of structs with args doesn't work
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Thu Feb 21 13:28:49 PST 2008
    
    
  
http://d.puremagic.com/issues/show_bug.cgi?id=1860
           Summary: Heap construction of structs with args doesn't work
           Product: D
           Version: 1.027
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: wbaxter at gmail.com
Heap construction of structs using arguments doesn't work.  It doesn't matter
if there's a static opCall explicitly defined or not.
-----
struct NoOpCalls
{
    int i;
    float x;
}
struct WithOpCall
{
    static WithOpCall opCall(int _i, float _x) {
        WithOpCall R; with(R) {
            i = _i;
            x = _x;
        } return R;
    }
    int i;
    float x;
}
void main()
{
    auto stacka = NoOpCalls(2, 5.0); // ok
    auto stackb = WithOpCall(2, 5.0); // ok
    auto heapa = new NoOpCalls(2, 5.0); // error no constructor
    auto heapb = new WithOpCall(2, 5.0); // error no constructor
}
----
This seems like an oversight rather than a deliberate design decision.
You can work around by "double initializing":
   auto heapa = new NoOpCalls; *heapa = NoOpCalls(2,5.0);
But that seems unnecessarily repetitive.
Anyway, this is yet another reason why structs should have real constructors,
as opposed to the static opCall hack.
-- 
    
    
More information about the Digitalmars-d-bugs
mailing list