dmd/compiler/test/compilable/b19294.d
2022-07-09 18:53:07 +02:00

69 lines
1.3 KiB
D

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[];
}