Some strange parameter deduction problems in opOpAssign and opBinary
Ivan Agafonov
armadil at yandex.ru
Sat Sep 1 22:08:59 PDT 2012
On Sunday, 2 September 2012 at 04:10:39 UTC, Ivan Agafonov wrote:
> There are 3 separated versions of opOpAssign
> first version must be the same as the second for Vec!(sometype,
> 4)
> why it doesn't work?
>
> Simplified code:
>
> struct Vec(T, uint size)
> {
> this(T rhs) { array[] = rhs; }
>
> // It doesn't work but compiles
> ref Vec!(T, size) opOpAssign(string op) (Vec!(T, size) rhs)
> {
> mixin("array[] "~op~"= rhs.array[];");
> return this;
> }
>
> // but it work's
> ref Vec!(T, 4) opOpAssign(string op) (Vec!(T, 4) rhs)
> {
> mixin("array[] "~op~"= rhs.array[];");
> return this;
> }
>
> // and this work;s
> ref Vec!(T, size) opAddAssign(Vec!(T, size) rhs)
> {
> array[] += rhs.array[];
> return this;
> }
>
> T[size] array = 0;
> }
>
> int main()
> {
> auto z = Vec!(float, 4)(5.0f);
> z += z;
> writeln(z);
> return 0;
> }
Problem solved:
alias Vec!(T, size) V;
// This works fine
ref V opOpAssign(string op)(V rhs)
{
mixin("array[] "~op~"= rhs.array[];");
return this;
}
But I think this is a bug.
More information about the Digitalmars-d-learn
mailing list