On 5/30/14 8:02 AM, Tommi wrote:
The manual says that the precedence of `as` operator is lower than
that of the binary `*` operator. Thus I would not expect the
following to compile (but it does):

let a: u16 = 1; let b: u32 = 2;

let r = a * b as u16;


Since multiplication is supposed to have precedence over casting, I
would expect the last line to be equivalent to:

let r = (a * b) as u16;

...which doesn't compile because `a` and `b` have different types.


Here the compiler clearly first converts `b` to u16 and then
multiplies `a` with the result of that conversion:

let r = a * b as u16;

...but that should happen only if the `as` operator has a higher
precedence than the binary `*` operator.

The precedence of "as" was that way in earlier versions of the language, but the manual was not updated when the language was changed. This should be considered a bug in the docs.

Patrick

_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to