On Sunday, 3 January 2021 at 13:36:57 UTC, Paul wrote:

Is there an easy way for me to know when code is assessed / generated at compile time? For example, is indexing a constant compile time array compile time or run time? Or how about functions? The hashOf documentation does not seem to hint to being done at compile time.

It's not what you do, but the context in which you do it. If a function must be evaluated at compile time, it will be.

```
string tellme() {
    if(__ctfe) return "Compile Time";
    else return "Run time";
}

void main()
{
    writeln(tellme());
    pragma(msg, tellme());
    writeln(tellme());
}
```

Since the msg pragma is a compile-time construct, tellme *must* be evaluated at compile time. The calls to writeln are just normal function calls, therefore the calls to tellme happen at runtime.

So any context where you replace a compile-time constant with a function call, you'll have CTFE (as long as it's possible [1]). It's common to use enum to force CTFE:

enum s = tellme();

[1] https://dlang.org/spec/function.html#interpretation

Reply via email to