CTFE and BetterC compatibility

Adam D Ruppe destructionator at gmail.com
Wed Apr 27 15:40:49 UTC 2022


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.


More information about the Digitalmars-d-learn mailing list