| #[test] |
| fn convert() { |
| const fn from(x: i32) -> i32 { |
| i32::from(x) |
| } |
| |
| const FOO: i32 = from(42); |
| assert_eq!(FOO, 42); |
| |
| const fn into(x: Vec<String>) -> Vec<String> { |
| x.into() |
| } |
| |
| const BAR: Vec<String> = into(Vec::new()); |
| assert_eq!(BAR, Vec::<String>::new()); |
| } |
| |
| #[test] |
| fn into_as_try_into() { |
| struct A; |
| struct B; |
| |
| impl Into<B> for A { |
| fn into(self) -> B { |
| B |
| } |
| } |
| |
| // This wouldn't compile if the `TryInto`/`TryFrom` blanket impls used |
| // `U: From<T>` instead of `T: Into<U>` |
| let Ok(B) = A.try_into(); |
| let Ok(B) = B::try_from(A); |
| } |