On Monday, 1 March 2021 at 20:05:57 UTC, Jack wrote:
int a; enum s = ""; // both return false but g(s) is expected to return true
So the value must be known at compile time without any extra context. So that `a` variable might be changed somewhere else so compile time can't read or write it.
`enum` is only allowed to be set once (and at compile time!) so it is allowed at CT too.
`static immutable` generally allows it too since it must be set at declaration then never changed again.
But almost any mutable variable is no go unless it is directly returned from a function which itself can be called at compile time.