Three legitimate bugs? (D1.061)

Steven Schveighoffer schveiguy at yahoo.com
Mon May 17 05:10:17 PDT 2010


On Sat, 15 May 2010 16:15:23 -0400, strtr <strtr at spam.com> wrote:

> Should I report these bugs?
> (and how should I call this first one?)
> ----
> module main;
> //const S S1 = S(); // uncomment this to compile
> struct S
> {
>   float value;
>   static S opCall()
>   {
>     S s;
>     return s;
>   }
>   const S S2 = S();
> }
> void main(){}
> --
> main.d(4): Error: struct main.S no size yet for forward reference
> main.d(4): Error: struct main.S no size yet for forward reference
> main.d(11): Error: cannot evaluate opCall() at compile time
> ----

Unlike some languages, D1 const does not imply static.  Which means you  
are trying to define an S as containing an S, which would then contain  
another S and so on.  This should work:

  struct S
  {
    float value;
    static S opCall()
    {
      S s;
      return s;
    }
    static const S S2 = S();
  }

-Steve


More information about the Digitalmars-d-learn mailing list