Fun with templates

finalpatch fengli at gmail.com
Fri Jul 5 18:42:28 PDT 2013


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);
     }
}


More information about the Digitalmars-d mailing list