asd wrote:
Daniel Keep Wrote:

bool isEmptyString(string str) {
       static if (str == "") return true;
It works if you use 'if' instead of 'static if', oddly.

       return false;
}

void main()
{
       static if (isEmptyString(""))
       {
               int x = 1;
       }
}


test.d(5): Error: expression str == "" is not constant or does not evaluate to 
a bool
test.d(11): Error: cannot evaluate isEmptyString("") at compile time
test.d(11): Error: expression isEmptyString("") is not constant or does not 
evaluate to a bool
Be sure to report this on Bugzilla: http://d.puremagic.com/issues/
I don't think this is a bug in DMD.

It can't execute it at compile-time because it CANNOT COMPILE IT.

str is a run-time argument.  static if requires a compile-time expression.

You can't feed runtime constructs to compile-time ones.  Evaluating a
function at compile time doesn't change that.

That's a shame. This distinction doesn't make sense to me -- it is clearly 
possible to know value of this function at compile time and there's no way to 
change the result at run time.

If it's not a bug, I've filed it as feature request then: 
http://d.puremagic.com/issues/show_bug.cgi?id=3209

It makes sense. A compile-time function must be executable in run time as well. Which means both of the following must be meaningful.

void main () {
  auto s = readln();
  if (isEmptyString(s)) { ... } // Run time executed
}

void main2 () {
  static if (isEmptyString("")) { ... } // Compile time executed
}

If you use static if in isEmptyString, the run time counterpart is meaningless.

Reply via email to