An if-let pattern attempts to match the pattern, and enters the body if the match was successful. If the match is irrefutable (when it cannot fail to match), use a regular let
-binding instead. For instance:
struct Irrefutable(i32); let irr = Irrefutable(0); // This fails to compile because the match is irrefutable. if let Irrefutable(x) = irr { // This body will always be executed. // ... }
Try this instead:
struct Irrefutable(i32); let irr = Irrefutable(0); let Irrefutable(x) = irr; println!("{}", x);