Thread overview
Binary operation on typedefs
Dec 15, 2009
Zarathustra
Dec 16, 2009
div0
Dec 16, 2009
Denis Koroskin
December 15, 2009
Do you think is it bug?

typedef uint A;
typedef A    B;

const A a1 = cast(A)0x01;
const A a2 = cast(A)0x02;

const B b1 = cast(B)0x04;
const B b2 = cast(B)0x04;

const A a3 = a1 | a2; // great it's ok (a1, a2, a3 same type)
const A a4 = b1; // great it's ok (b1 is delivered from A)
const A a5 = a1 | b1; // ERROR, but why?

In my opinion result of a1 and b1 shoud be A type not uint.
December 16, 2009
Zarathustra wrote:
> Do you think is it bug?
> 
> typedef uint A;
> typedef A    B;
> 
> const A a1 = cast(A)0x01;
> const A a2 = cast(A)0x02;
> 
> const B b1 = cast(B)0x04;
> const B b2 = cast(B)0x04;
> 
> const A a3 = a1 | a2; // great it's ok (a1, a2, a3 same type)
> const A a4 = b1; // great it's ok (b1 is delivered from A)
> const A a5 = a1 | b1; // ERROR, but why?
> 
> In my opinion result of a1 and b1 shoud be A type not uint.

typedef is broken and is going to be removed from D2.
So don't use it in D1 either.

- --
My enormous talent is exceeded only by my outrageous laziness.
http://www.ssTk.co.uk
December 16, 2009
On Wed, 16 Dec 2009 02:45:35 +0300, Zarathustra <adam.chrapkowski@gmail.com> wrote:

> Do you think is it bug?
>
> typedef uint A;
> typedef A    B;
>
> const A a1 = cast(A)0x01;
> const A a2 = cast(A)0x02;
>
> const B b1 = cast(B)0x04;
> const B b2 = cast(B)0x04;
>
> const A a3 = a1 | a2; // great it's ok (a1, a2, a3 same type)
> const A a4 = b1; // great it's ok (b1 is delivered from A)
> const A a5 = a1 | b1; // ERROR, but why?
>
> In my opinion result of a1 and b1 shoud be A type not uint.

typedef defines a new type. Use "alias" instead.