On Saturday, 27 January 2018 at 08:18:07 UTC, thedeemon wrote:
On Friday, 26 January 2018 at 21:17:14 UTC, Oleksii Skidan wrote:

struct Game {
    Triangle player = new Triangle;

When you initialize a struct member like this, compiler tries to calculate the initial value and remember it as data, so each time such struct is constructed the data is just copied. Which means this data must be computable at compile time, however your Triangle constructor is using pointers to some values, these pointers will only be known at run time. This means you need to construct Triangles at run time, in Game constructor, not at compile time in this initialization syntax.

Got it. But are reference-types "computable" at compile time at all? Shouldn't they be relying on D runtime?

To my understanding Triangle instantiation happens when Game constructor is called. I assume that D runtime has been initialized already, and thus there should be a valid GC and it should be fine to instantiate a reference-type.

As well, if I'm wrong about Game constructor, then compiler generated errors are wrong and misleading. The compiler should be swearing at `Triangle player = new Triangle;`, or not?

Thanks,
-- Oleksii

Reply via email to