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
の戻り値の型はType
orconst(Type)
である必要がありますが、その理由は?
const(T)
はスーパータイプなので、 を返す必要があるかもしれませんがconst
、実際にはこれをほとんど見たことがありません。これらの型を使用する、またはそれらの型によって使用される型と関数の階層を扱う場合、物事はかなり複雑になります。