I think you found a bug and should file an issue for the parse::<i32>() case! I tried to look for existing issues but couldn't find anything exactly. These looked somewhat related:
- Number to/from string API · Issue #6220 · rust-lang/rust · GitHub but more to do with floats
- https://github.com/rust-lang/rfcs/issues/1098 but more to do with hex
Here's a link to a minimal reproduction of the issue on playpen, the expected behavior being a successful compilation and run: Rust Playground
As far as the language itself, which you said is not very important, this behavior is sort of documented by the lack of + under unary operators in the reference.