blob: ed1a71747e409fad5bc09b297da0f0920020d5bb [file] [log] [blame]
alias MT = MyStruct!int;
struct MyStruct(T)
{
T x;
this(T y)
{
x = y;
}
MyStruct!T opBinary(string op)(MyStruct!T y) const
{
alias C = typeof(return);
auto w = C(this.x);
return w.opOpAssign!(op)(y);
}
MyStruct!T opBinaryRight(string op)(MyStruct!T y) const
{
return opBinary!(op)(y);
}
ref MyStruct opOpAssign(string op, T)(const MyStruct!T z)
{
mixin ("x "~op~"= z.x;");
return this;
}
MyStruct!T opBinary(string op)(T y) const
{
alias C = typeof(return);
auto w = C(this.x);
return w.opOpAssign!(op)(y);
}
MyStruct!T opBinaryRight(string op)(T y) const
{
return opBinary!(op)(y);
}
ref MyStruct opOpAssign(string op, T)(const T z)
{
mixin ("x "~op~"= z;");
return this;
}
}
void test()
{
MT s = MyStruct!int(1);
MT[] arr = [s, 2 * s, 3 * s, 4 * s, 5 * s, 6 * s];
MT[] result = new MT[arr.length];
result[] = arr[] + s;
result[] = s + arr[];
result[] = arr[] - s;
result[] = s - arr[];
result[] = arr[] * s;
result[] = s * arr[];
result[] = arr[] / s;
result[] = s / arr[];
result[] = arr[] ^^ s;
result[] = s ^^ arr[];
}