static parameters
Jason House
jason.james.house at gmail.com
Sat Sep 1 10:58:50 PDT 2007
Bill Baxter wrote:
> 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?
Those are all good points!
> 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.
I think this style of functionality could be useful. Provided that I
don't have to write lots of function definitions, having the compiler
figure out what is or isn't compile-time values and optimizing based on
that is a good thing. Personally, I think something like the return
keyword could be helpful here too
>
> 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