On Thursday, 1 August 2013 at 21:56:46 UTC, John Colvin wrote:
On Thursday, 1 August 2013 at 20:42:08 UTC, JS wrote:
http://dpaste.dzfl.pl/0c923861

class A
{
   double x;
   @property double X() { return x; }
   @property double X(double v) { return x = v; }
   alias X this;
}

class B
{
   A a;
   @property A Y() { return a; }
   @property A Y(A v) { return a = v; }
}


void main()
{
        B b = new B();
        b.Y = 3;
}

error not a property of b.Y



adding refs to the returns of the getters allows the code to work but only getters are called(hence the need for refs).

Please allow alias this to work with overloaded functions. (specifically properties, b.Y = 3; is not b.Y() = 3 but b.Y(3);)

b.Y = 3 is rewritten as b.Y(3)

You are asking for an "int" to be be implicitly convertible to an "A", which isn't possible.

This is wrong because

(cast(A)b.Y) = 3;

works.

b.Y(3) should work because A is aliased to double.

One of the issues is

b.Y(3)

The setter of B is never called.

You are right that b.Y(3) does not accept an int(or double) BUT this is a bug in the compiler because it should since 3 can be assigned to it. It's just that the compiler isn't smart enough to see this because of the way it calculates the assignment.

b.Y = 3 should do the same as b.a = 3 which should be the same as b.a.x = 3.

If you think about what the code is actually doing you will see it should be possible.


http://dpaste.dzfl.pl/ac376ca0

Reply via email to