digitalmars.D - std.metastrings.ToString! problems
- asd <no spam.com> Jul 23 2009
- Daniel Keep <daniel.keep.lists gmail.com> Jul 23 2009
- BCS <ao pathlink.com> Jul 23 2009
I'm trying to write basic compile-time function:
string usedForMixin()
{
int n=0;
/* do stuff */
return "int x = " ~ std.metastrings.ToString!(n) ~ ";";
}
However I'm getting:
/usr/local/bin/../src/phobos/std/metastrings.d(104): Error: expression
cast(long)n is not a valid template value argument
If I change int to long:
/usr/local/bin/../src/phobos/std/metastrings.d(87): Error: expression n < 0L is
not constant or does not evaluate to a bool
(D2, OS X)
Jul 23 2009
asd wrote:I'm trying to write basic compile-time function: string usedForMixin() { int n=0; /* do stuff */ return "int x = " ~ std.metastrings.ToString!(n) ~ ";"; } However I'm getting: /usr/local/bin/../src/phobos/std/metastrings.d(104): Error: expression cast(long)n is not a valid template value argument If I change int to long: /usr/local/bin/../src/phobos/std/metastrings.d(87): Error: expression n < 0L is not constant or does not evaluate to a bool (D2, OS X)
That's because n isn't a compile-time constant. You can't instantiate a template with runtime variables.
Jul 23 2009
Reply to Daniel,asd wrote:I'm trying to write basic compile-time function: string usedForMixin() { int n=0; /* do stuff */ return "int x = " ~ std.metastrings.ToString!(n) ~ ";"; } However I'm getting: /usr/local/bin/../src/phobos/std/metastrings.d(104): Error: expression cast(long)n is not a valid template value argument If I change int to long: /usr/local/bin/../src/phobos/std/metastrings.d(87): Error: expression n < 0L is not constant or does not evaluate to a bool (D2, OS X)
a template with runtime variables.
that includes "runtime variables" used in CTFE (this is because CTFE functions are also normal runtime functions).
Jul 23 2009








BCS <ao pathlink.com>