View mode: basic / threaded / horizontal-split · Log in · Help
May 10, 2003
constant folding
I propose to enable constant folding and inlining where it is not currently
allowed:
(it should at least *try* to evaluate it at compile time, since the
parameters are all constants)

int bar(int t) { return t*2; }

template templ(int t)

{

   struct foo

   {

       enum { result = bar(t) } // error: Integer constant expression
expected instead of bar(5)

       enum { result = t*2 } // works

   }

}

int main()

{

   int k = instance templ(5).foo.result;

   printf("%d",k);

   return 0; // it'd be really nice if this printed 10!

}



Performing Pre-Build Event...

c:\DMD\src\test>..\..\bin\dmd test.d -debug -g -unittest

test.d(266): Integer constant expression expected instead of bar(5)

test : error PRJ0002 : error result returned from 'c:\Temp\BAT000003.bat'.
May 10, 2003
Re: constant folding
The problem here is the order in which things are done internally. It's not
so easy to change!

"Sean L. Palmer" <palmer.sean@verizon.net> wrote in message
news:b9i2bu$1ufb$1@digitaldaemon.com...
> I propose to enable constant folding and inlining where it is not
currently
> allowed:
> (it should at least *try* to evaluate it at compile time, since the
> parameters are all constants)
>
> int bar(int t) { return t*2; }
>
> template templ(int t)
>
> {
>
>     struct foo
>
>     {
>
>         enum { result = bar(t) } // error: Integer constant expression
> expected instead of bar(5)
>
>         enum { result = t*2 } // works
>
>     }
>
> }
>
> int main()
>
> {
>
>     int k = instance templ(5).foo.result;
>
>     printf("%d",k);
>
>     return 0; // it'd be really nice if this printed 10!
>
> }
>
>
>
> Performing Pre-Build Event...
>
> c:\DMD\src\test>..\..\bin\dmd test.d -debug -g -unittest
>
> test.d(266): Integer constant expression expected instead of bar(5)
>
> test : error PRJ0002 : error result returned from 'c:\Temp\BAT000003.bat'.
>
>
>
>
Top | Discussion index | About this forum | D home