On Wednesday, 23 December 2020 at 09:06:02 UTC, Godnyx wrote:
On Wednesday, 23 December 2020 at 08:50:50 UTC, Mike Parker
wrote:
On Wednesday, 23 December 2020 at 08:45:15 UTC, Godnyx wrote:
Yep and I find it out! It won't work with templates and/or
variadic function parameters. It says that the variable can't
be read at compile time (so I can't cast it) or it will work
but it will give me a segmentation fault (lol hello C). Any
idea why this is happening in those cases?
Please show the code that's causing the error. Without it, all
anyone can do is keep making suggestions that *might* be the
problem. With the code, someone can point to it exactly.
Yep that's the best thing I can do! Code:
import core.stdc.stdio : printf;
import std.string : toStringz;
void put(A...)(string prompt, A args) {
for (ulong i = 0; i < args.length; i++) {
if (typeof(args[i]).stringof == "string")
printf("%s\n", args[i].toStringz);
}
}
void main() {
string h = "World!";
string w = "World!";
put(h, w);
}
I'm getting two errors. First that i can't be read at compile
time and second that I don't initialize the function right. So
I know I'm doing something wrong but I don't know why... Any
ideas?
I didn't dive into your use case, but you should use static
foreach in this case:
void put(A...)(string prompt, A args) {
static foreach (ulong i; 0..args.length) {
if (typeof(args[i]).stringof == "string")
printf("%s\n", args[i].toStringz);
}
}