On Thursday, 4 March 2021 at 13:58:48 UTC, frankp wrote:
Hi all,

I want to make an opaque type that simply contains an integer with some immutable constants and toString pretty printing. Like this:

struct Foo_t
{
   private long foo;
   alias foo this;
   static immutable long Inf = long.max; //1)

   void toString(...){}
}

On dmd 2.092.1 this fails with:
1) Error: cannot implicitly convert expression 9223...L of type immutable(long) to Foo_t

I simply want to initialize an immutable long with long.max.
Why the conversion to Foo_t ?

If I add a constructor:
private this(long f)
{
   foo = f;
}

It compiles but according to code coverage this constructor is never called.
What's going on?

I tried compiling your code locally on DMD 2.094.1, and had no issues. Again with 2.095.0, no issues. On run.dlang.io, with all dmd compilers from 2.060, and it just plain works.

Now, that's after removing ... from toString. With that present, it fails with some variation of 'Error: undefined identifier '__va_list_tag''.

Most likely, you have shortened your program for clarity, and removed the issue you're experiencing in the process. Can we have another one, with the issue still there?

--
  Simen

Reply via email to