Fun with templates
Timon Gehr
timon.gehr at gmx.ch
Sat Jul 6 07:49:31 PDT 2013
On 07/06/2013 04:06 PM, Manu wrote:
> ...
> It seems that your code works if you put the Template Type explicit:
> ----
> import std.stdio;
> import std.traits : Unqual;
>
> void foo(T)(Unqual!T a) {
> writeln(typeof(a).stringof, " <-> ", T.stringof);
> }
>
> void main() {
> int a;
> const int b;
> immutable int c;
>
> //foo(c); /// Error
> foo!(typeof(a))(a);
> foo!(typeof(b))(b);
> foo!(typeof(c))(c);
> }
> ----
>
>
> Indeed, hence my point that the type deduction is the key issue here.
> It should be possible... maybe a bit tricky though.
The key issue is that the syntax void foo(T)(Unqual!T a); denotes
roughly the opposite of what you think it denotes. Basically, inference
is instructed to find a T, such that Unqual!T is the argument type.
More information about the Digitalmars-d
mailing list