static parameters

Bill Baxter dnewsgroup at billbaxter.com
Thu Aug 30 17:35:36 PDT 2007


On page 30 of WalterAndrei.pdf it talks about static function parameters.

It says
    void foo(static int i, int j) { ... }
will become a synonym for the template
    void foo(int i)(int j) { ... }

And the reason given is it's supposed to make templates "easier for 
mortals".

I don't really see how that makes anything easier.  It's longer to type 
first of all.  And you still have to be aware of the compile-time / 
runtime distinction, this just makes it a little harder to see.  And it 
introduces issues like what to do if there are both template parameters 
and static arguments, and what to do with __traits for such functions, 
and what the parameters tuple should look like, and whether you can have 
foo(int i, static j), and whether you can still call it as foo!(7)(5), 
and if you can call foo(int i)(int j) as foo(3,x)?

And if it is just like a template can you take &foo?  If not, how do you 
take the address of a particular specialization of the function?  Do you 
revert back to foo!(3) then?

In short it seems like a classic case of a feature that adds little 
benefit, but a fair number of new rules that everyone will have to 
remember, and in the end it could very likely stomp on the toes of some 
other future features that would be much more useful.

As far as I can tell, this is just another way to do something we can 
already do, and all we gain from it is the ability to save two 
characters on the calling side for functions that are only templated on 
const values.

--bb



More information about the Digitalmars-d mailing list