On 6 July 2013 11:42, finalpatch <fen...@gmail.com> wrote: > On Saturday, 6 July 2013 at 01:35:09 UTC, Manu wrote: > >> Okay, so I feel like this should be possible, but I can't make it work... >> I want to use template deduction to deduce the argument type, but I want >> the function arg to be Unqual!T of the deduced type, rather than the >> verbatim type of the argument given. >> >> I've tried: void f(T : Unqual!U, U)(T a) {} >> and: void f(T)(Unqual!T a) {} >> >> Ie, if called with: >> const int x; >> f(x); >> Then f() should be generated void f(int) rather than void f(const int). >> >> I don't want a million permutations of the template function for each >> combination of const/immutabe/shared/etc, which especially blows out when >> the function has 2 or more args. >> >> Note: T may only be a primitive type. Obviously const(int*) can never be >> passed to int*. >> > > this? > > template f(T) > { > void f (T x) > { > f_i(x); > } > void f_i(Unqual!T x) > { > writefln("%s", x); > } > } >
And again, f(T), the signature is wrong. There is also an additional call... twice as slow when non-optimised :/