On Tuesday, 14 December 2021 at 21:06:19 UTC, Paul Backus wrote:
>On Tuesday, 14 December 2021 at 20:07:43 UTC, Daniel N wrote:
>On Tuesday, 14 December 2021 at 16:15:28 UTC, WebFreak001 wrote:
>string name = readln();
auto greeting = text!(__header!..., "hello ", name, "!");
that wouldn't work because name is a runtime variable and you are trying to use it as a template parameter here.
I assumed it works with alias/variadic params...?
import std;
int sum(Vs...)()
{
int sum = 0;
foreach(v ; Vs)
sum += v;
return sum;
}
void main()
{
int a = to!int(readln());
sum!a.writeln;
}
It works for variables, but not arbitrary expressions. For example, if you wrote
sum!(a, a+1).writeln;
...then you would get an error:
Error: variable `a` cannot be read at compile time
So passing a raw a should work (it's an alias parameter).
Passing a+1 obviously doesn't as it is not a value that can be computed at compile time. Which lead me to think, can't we generate some kind of struct on the fly for the "${}" syntax? That would solve the problem and the end result would be supperior to the i solution (in fact, it would allow to implement the i solution as a library).