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