D1.0 If you have a function template of one type parameter, T, that takes a class template of the same type parameter, T, as an argument, then typical template usage scenario goes like this:
/* Class template definition */ class Foo(T) { } /* Function template definition */ void bar(T)( Foo!(T) arg) { // ... } /* Instantiation usage */ main() { auto foo = new Foo!(float)(); /* line A */ bar!(float)( foo); /* line B */ } Now since in the main function the compiler knows that T is float at line A, it occurs to me that code noise could be reduced a bit if the compiler could somehow deduce at line B that the function template parameter, T, is float without it having to be explicitly written. The instantiation usage would now look like this: /* Less-noisy instantiation usage */ main() { auto foo = new Foo!(float)(); /* line A */ bar( foo); /* line B */ } The only problem is how then to write the function template definition so that T can be defaulted to the class parameter, T, that accompanies Foo. One idea I had, which of course doesn't work, is to define the function template's argument with the auto keyword and then somehow figure out T from the argument like so: /* Function template definition */ void bar(T = typeof( arg))( auto arg) { // ... } Since I'm getting used to finding cool features in D that always lets you do stuff you never dreamed of, and since I have a lot of template instantiation code, it would be really neat to be able to reduce the noise a bit as outlined above. Any ideas anybody? (Note D1.0) Perhaps this is a no brainer and I just goofed up but have given up after a spending way too much time on it thus far. Thanks all. Justin Johansson