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?

This is the text of my program

import std.stdio;

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

   void toString(...){ writeln(foo); }
}


void main()
{
        Foo_t sample;
        sample.foo = 100;
        
        sample.toString();
}


This is the results of running the program:

PS C:\Users\someone\source\tests> dmd forum1.d
PS C:\Users\someone\source\tests> ./forum1.exe
100
PS C:\Users\someone\source\tests> dmd --version
DMD32 D Compiler v2.095.1-dirty
Copyright (C) 1999-2020 by The D Language Foundation, All Rights Reserved written by Walter Bright

So I was not able to reproduce your issue. Is it possible that error is coming from somewhere else?

Reply via email to