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