Jarrett Billingsley wrote: > On Fri, Jul 24, 2009 at 11:03 PM, asd<[email protected]> wrote: >> Jarrett Billingsley Wrote: >> >>> Can you post more of your code? >> I've reduced it to this: >> >> >> 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.
