On Thu, 20 Sep 2012 15:57:47 -0400, Jonas Drewsen <[email protected]>
wrote:
In foreach statements the type can be inferred:
foreach (MyFooBar fooBar; fooBars) writeln(fooBar);
same as:
foreach (foobar; fooBars) writeln(fooBar);
This is nice and tidy.
Wouldn't it make sense to allow the same for function templates as well:
auto min(L,R)(L a, R b)
{
return a < b;
}
same as:
auto min(a,b)
{
return a < b;
}
What am I missing (except some code that needs chaging because only
param type and not name has been specified in t?
Although I like it, I wonder if it works in D's context free grammar.
Timon probably would know best...
I came up with this code, which compiles today:
import std.stdio;
alias int x;
void foo(x) {}
void foo2(string x) {writeln(x);}
void main()
{
foo(1);
foo2("hello");
}
Under your proposal, if we shorten foo2 to foo2(x), what happens? Does it
become just like foo? Or does it turn into a template? Or is it an error?
Note that just because some syntax isn't valid doesn't mean it should be
utilized for a valid use. That can result in code compiling and meaning
something completely different than you expect.
-Steve