static opCall 'hidden' by incompatible constructors

Nick Treleaven via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 17 10:11:22 PDT 2014


Hi,
I'm trying to update std.typecons.Unique. I want to add a static opCall 
with no arguments to simulate a nullary-argument constructor. 
Unfortunately, with a recent dmd from Git, I get this (reduced code):

class Class {}

struct U
{
     Class c;

     this(A...)(A args)
     if (A.length != 0)
     {
         c = new Class(args);
     }

     static U opCall()
     {
         U u;
         u.c = new Class;
         return u;
     }
}

$ c:\git\digger\current\bin\dmd -w -c "opcall.d" -g -gc -unittest
opcall.d(24): Error: struct opcall.U static opCall is hidden by 
constructors and can never be called
opcall.d(24):        Please use a factory method instead, or replace all 
constructors with static opCall.

This is a new error in the next release. It seems to be this bug, marked 
as WONTFIX:
https://issues.dlang.org/show_bug.cgi?id=12194

As nullary static opCall doesn't conflict with a nullary constructor (as 
the latter can't exist), it would be useful to allow it. Otherwise, how 
can we wrap the construction of a class with a nullary constructor?


More information about the Digitalmars-d mailing list