Specialization Not Allowed for Deduced Parameter

Yota via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Aug 22 19:47:48 PDT 2014


On Friday, 22 August 2014 at 21:38:29 UTC, Ali Çehreli wrote:
> So, the correct check should use std.traits.TemplateOf first:
>
>     auto opBinary(string op, That)(That rhs)
>         if (isInstanceOf!(TemplateOf!UnitDef, That) &&
>             op == "*") {
>         return UnitDef!(unitString ~ " " ~ rhs.US)();
>     }
>
> Now, that's correct and allows different instances:
>
> import std.traits;
>
> public struct UnitDef(string unitString) {
>     alias US = unitString;
>
>     auto opBinary(string op, That)(That rhs)
>         if (isInstanceOf!(TemplateOf!UnitDef, That) &&
>             op == "*") {
>             pragma(msg, typeof(this));
>             pragma(msg, That);
>         return UnitDef!(unitString ~ " " ~ rhs.US)();
>     }
> }
>
> void main()
> {
>     auto u = UnitDef!"hello"();
>     auto v = UnitDef!"world"();
>     auto result = u * v;
>     pragma(msg, result.US);
> }
>
> Ali

This certainly did the trick.  Thanks!

So what's up with the syntax I tried before?  Has it been
deprecated?


More information about the Digitalmars-d-learn mailing list