"Manu" <turkey...@gmail.com> wrote in message news:mailman.1754.1373081562.13711.digitalmar...@puremagic.com... > On 6 July 2013 11:41, Daniel Murphy <yebbl...@nospamgmail.com> wrote: > >> >> "Manu" <turkey...@gmail.com> wrote in message >> news:mailman.1752.1373074509.13711.digitalmar...@puremagic.com... >> > 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*. >> > >> >> void f(T)(T _a) { Unqual!T a = _a; ... } >> > > That doesn't do what I want at all. The signature is still f(T) not > f(Unqual!T). >
Yeah it's possible I didn't finish reading your post.