<div>Doesn't that mean you're asking the compiler to have a full unification engine? Your example is simple, but the general case is more complicated:</div>
<div> </div>
<div>void foo(T,U,V)(Tuple!(T,U) tup, V function(U) fun)</div>
<div>{ ... }</div>
<div> </div>
<div>void main()</div>
<div>{</div>
<div>    foo(tuple(1,"abc"), (a) => 1.34); // so, I can deduce V to be double</div>
<div> </div>
<div>    foo(tuple(1,"abc"), (int i) => i+); // error, U unified to string and int!</div>
<div>}</div>
<div> </div>
<div> </div>