template functions, a special case of constant folding?

Derek Parnell derek at psych.ward
Thu Mar 23 15:55:50 PST 2006


On Thu, 23 Mar 2006 16:34:07 -0700, Hasan Aljudy wrote:

> Given the following expression:
> #x = 10 * 5 + y;
> the compiler will compute 10 * 5 at compile-time and convert the 
> expression into
> #x = 50 + y;
> 
> I think that's called constant-folding, am I right?
> 
> Why can't this be extended such that for the following function:
> # int add( int x, int y ) { return x + y; }
> 
> if it's called with constant arguments:
> # x = add( 10, 3 );
> 

You can almost do this with mixins, except that mixins only allow one to
mixin a complete statement and not just an expression. What would be useful
is to allow mixins (or some other similar thing) to generate expressions at
compile time and not just statements. Something like ...

 
 template add(b,c)
 {
    b + c;
 }

 int main()
 {
   int q;
   q = mixin add!(10,3);
   return q;
 }

Which would generate 

 int main()
 {
   int q;
   q = 10 + 3;
   return q;
 }

Which the compiler would constant-fold as normal.

But this is starting to look too much like text macros which Walter is very
concerned not to have.

-- 
Derek
(skype: derek.j.parnell)
Melbourne, Australia
"Down with mediocracy!"
24/03/2006 10:51:16 AM



More information about the Digitalmars-d-announce mailing list