struct Type
{
auto opBinary(string op)(Type other) const {
return Type(); // #1 return type is Type
return typeof(this)(); // #2 return type is const(Type)
}
}
unittest
{
Type t1, t2;
auto t3 = t1 + t2;
}
ではt1.opBinary!("+")(t2)、t1定数になりますが、t2非定数のままです。opBinaryの戻り値の型はTypeorconst(Type)である必要がありますが、その理由は?
const(T)はスーパータイプなので、 を返す必要があるかもしれませんがconst、実際にはこれをほとんど見たことがありません。これらの型を使用する、またはそれらの型によって使用される型と関数の階層を扱う場合、物事はかなり複雑になります。