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?
