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
next sibling 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)
 
That's because n isn't a compile-time constant. You can't instantiate 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
prev sibling parent reply asd <x x.com> writes:
 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.
that includes "runtime variables" used in CTFE (this is because CTFE functions are also normal runtime functions).
In this case value of n is possible to know at compile time - it depends only on compile-time input. I'm not going to use this function at run time. Too bad I can't declare that :(
Jul 24 2009
parent Ary Borenszweig <ary esperanto.org.ar> writes:
asd wrote:
 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.
that includes "runtime variables" used in CTFE (this is because CTFE functions are also normal runtime functions).
In this case value of n is possible to know at compile time - it depends only on compile-time input. I'm not going to use this function at run time. Too bad I can't declare that :(
So write: const int n = 0;
Jul 24 2009