mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 05:00:16 +03:00
69 lines
1.3 KiB
D
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[];
|
|
}
|