www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - std.metastrings.ToString! problems

reply asd <no spam.com> writes:
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
parent reply Daniel Keep <daniel.keep.lists gmail.com> writes:
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
parent BCS <ao pathlink.com> writes:
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