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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sean L. Palmer | 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'. > > > > |
Copyright © 1999-2021 by the D Language Foundation