On Wednesday, 27 April 2022 at 14:21:15 UTC, Claude wrote:
The operation requiring the D-runtime is appending the array, but it should **only** be done at compile-time.

In that case, you want to prove to the compiler it is only called at compile time by encapsulating the function inside a template or defining it immediately where it is called.

Delete the stand-alone function `parse` and instead call it like this:

```
// define it....
enum Data parsedData = function Data (string str) pure
{
    Data data;

    while (str.length != 0)
    {
        // Skip spaces
        while (str[0] == ' ')
            str = str[1 .. $];

        // Parse single digit integer
        data.digits ~= parseDigit(str[0]);

        // Consume digit
        str = str[1 .. $];
    }

    return data;
} ("5 4 2 6 9"); // and call it in the same place
```



Or if you want it to be independently defined still, you can define it inside a helper template but you'd have to return a basic type instead of Data, so I think calling it immediately is what you want to do here.


There was going to be a ctfe-only thing you could put in the function so the compiler doesn't try to generate the runtime version, but this got killed due to internal D politics. A pity.

Reply via email to