You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This leads to somewhat confusing results (see this SO question). Example code:
fnmain(){let pair = (2953495866u, -2953495866);println!("Tell me about {}", pair);match pair {(x, y)if x == y => println!("These are twins"),(x, y)if x + y == 0 => println!("Antimatter, kaboom!"),(x, _)if x % 2 == 1 => println!("The first one is odd"),
_ => println!("No correlation..."),}}
Prints
Tell me about (2953495866, 18446744070756055750)
Antimatter, kaboom!
No compiler output is produced.
However, when u is added to the second literal:
fnmain(){let pair = (2953495866u, -2953495866u);println!("Tell me about {}", pair);match pair {(x, y)if x == y => println!("These are twins"),(x, y)if x + y == 0 => println!("Antimatter, kaboom!"),(x, _)if x % 2 == 1 => println!("The first one is odd"),
_ => println!("No correlation..."),}}
A warning is printed by the compiler:
<anon>:3:30: 3:42 warning: negation of unsigned int literal may be unintentional, #[warn(unsigned_negate)] on by default
<anon>:3 let pair = (2953495866u, -2953495866u);
^~~~~~~~~~~~
The text was updated successfully, but these errors were encountered:
Related I think: there is no warning when you provide a negative literal when indexing a Vec or something like it which implements Index<uint, _>. This is potentially confusing to those coming from languages where -1 is used to index the last element of a collection.
fn main() {
let x: u32 = -10; -- no warning
println!("{}", x);
}
Basically, the linter seems to only fire if there is a - and u in the same literal, but does not actually care about negative literals being assigned to and unsigned datatype.
huonw
added
the
A-lint
Area: Lints (warnings about flaws in source code) such as unused_mut.
label
Jan 8, 2015
This leads to somewhat confusing results (see this SO question). Example code:
Prints
No compiler output is produced.
However, when
u
is added to the second literal:A warning is printed by the compiler:
The text was updated successfully, but these errors were encountered: