On Monday, 3 September 2018 at 14:00:23 UTC, agorkvmh wrote:
There is a way to do print the two values at compile time?

Yes. Put a pragma where you static assert for Foo(1).pos equality with 2:

--
static assert(Foo(1).pos == 2);
pragma(msg, Foo(1).pos);

struct Foo
{
    this(int i)
        {
                static assert(this.init.pos == 1);
                advance();
        }

    size_t pos = 1;

    void advance()
    {
        pragma(msg, pos);
        pos = pos + 1;
        pragma(msg, pos);
    }
}

void main(){}
--
What's the best way to debug a CTFE function?

There is none.

From the Dlang tour:
"CTFE is a mechanism which allows the compiler to execute functions at compile time. There is no special set of the D language necessary to use this feature - whenever a function just depends on compile time known values the D compiler might decide to interpret it during compilation."
https://tour.dlang.org/tour/en/gems/compile-time-function-evaluation-ctfe

As no specifics for CTFE writing exist, no specifics for CTFE testing exist.

So, the way to choose is the one you did: by putting static asserts at the places where you want to assert, that something has to have specific values. I also added another one, before the initialization of the struct. I.e., before calling the advance function.

Reply via email to