On Friday, 22 November 2024 at 16:36:43 UTC, Andrew wrote:
Error: variable \`i\` cannot be read at compile time

Tuple access seems to be internally coded as a template (with unusual syntax) for the reasons already said. `i` has to be known at compile time for this to work, so a template parameter.

```
string getOrZerothT(Tuple!(string, string, string) tup, int i)() pure {
        //AliasSeq!(a,b,c) = tup.expand;
    return tup[i] == "" ? tup[0] : tup[i];
}

string getOrZerothT2(int i)(Tuple!(string, string, string) tup) pure {
    return tup[i] == "" ? tup[0] : tup[i];
}

```

you could probaly make it compile with an ugly cast, verbose switch, but if you know its all the same type you should use an array(`foo(T,N)(T[N] arr...)` btw)

Here is something that compiles
```
string getOrZeroth(Tuple!(string, string, string) tup, int i) pure {
        string[tup.length] s = [tup.expand];
        return s[i] == "" ? s[0] : s[i];
}
```

Reply via email to