Compile-time constness is waaay to strict!
Daniel Keep
daniel.keep.lists at gmail.com
Sat Jul 25 00:57:27 PDT 2009
Jarrett Billingsley wrote:
> On Fri, Jul 24, 2009 at 11:03 PM, asd<a at s.d> 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.
More information about the Digitalmars-d
mailing list