diff options
| author | Andre Bogus <bogusandre@gmail.com> | 2018-04-12 22:07:53 +0200 |
|---|---|---|
| committer | Andre Bogus <bogusandre@gmail.com> | 2018-04-13 18:30:57 +0200 |
| commit | b744e3d7f516f1c679a4f6315110e856b9731de4 (patch) | |
| tree | 0731c10a625c184166342d21212bb577e7a1c25f | |
| parent | 6c537493d01694cc6e0a614dff12c475055aa2b4 (diff) | |
| download | rust-b744e3d7f516f1c679a4f6315110e856b9731de4.tar.gz rust-b744e3d7f516f1c679a4f6315110e856b9731de4.zip | |
[doc] note the special type inference handling for shifts
| -rw-r--r-- | src/libcore/ops/bit.rs | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/libcore/ops/bit.rs b/src/libcore/ops/bit.rs index a0ecd6cf75c..ec1e65be774 100644 --- a/src/libcore/ops/bit.rs +++ b/src/libcore/ops/bit.rs @@ -315,7 +315,12 @@ macro_rules! bitxor_impl { bitxor_impl! { bool usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 } -/// The left shift operator `<<`. +/// The left shift operator `<<`. Note that because this trait is implemented +/// for all integer types with multiple right-hand-side types, Rust's type +/// checker has special handling for `_ << _`, setting the result type for +/// integer operations to the type of the left-hand-side operand. This means +/// that though `a << b` and `a.shl(b)` are one and the same from an evaluation +/// standpoint, they are different when it comes to type inference. /// /// # Examples /// @@ -417,7 +422,12 @@ macro_rules! shl_impl_all { shl_impl_all! { u8 u16 u32 u64 u128 usize i8 i16 i32 i64 isize i128 } -/// The right shift operator `>>`. +/// The right shift operator `>>`. Note that because this trait is implemented +/// for all integer types with multiple right-hand-side types, Rust's type +/// checker has special handling for `_ >> _`, setting the result type for +/// integer operations to the type of the left-hand-side operand. This means +/// that though `a >> b` and `a.shr(b)` are one and the same from an evaluation +/// standpoint, they are different when it comes to type inference. /// /// # Examples /// |
