diff options
Diffstat (limited to 'crates/hir_ty/src/tests/traits.rs')
-rw-r--r-- | crates/hir_ty/src/tests/traits.rs | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/crates/hir_ty/src/tests/traits.rs b/crates/hir_ty/src/tests/traits.rs index 7c0ff2170..49add4ab9 100644 --- a/crates/hir_ty/src/tests/traits.rs +++ b/crates/hir_ty/src/tests/traits.rs | |||
@@ -161,7 +161,7 @@ mod result { | |||
161 | } | 161 | } |
162 | 162 | ||
163 | #[test] | 163 | #[test] |
164 | fn infer_tryv2() { | 164 | fn infer_try_trait_v2() { |
165 | check_types( | 165 | check_types( |
166 | r#" | 166 | r#" |
167 | //- /main.rs crate:main deps:core | 167 | //- /main.rs crate:main deps:core |
@@ -172,26 +172,41 @@ fn test() { | |||
172 | } //^ i32 | 172 | } //^ i32 |
173 | 173 | ||
174 | //- /core.rs crate:core | 174 | //- /core.rs crate:core |
175 | #[prelude_import] use ops::*; | ||
176 | mod ops { | 175 | mod ops { |
177 | trait Try { | 176 | mod try_trait { |
178 | type Output; | 177 | pub trait Try: FromResidual { |
179 | type Residual; | 178 | type Output; |
179 | type Residual; | ||
180 | } | ||
181 | pub trait FromResidual<R = <Self as Try>::Residual> {} | ||
180 | } | 182 | } |
183 | |||
184 | pub use self::try_trait::FromResidual; | ||
185 | pub use self::try_trait::Try; | ||
186 | } | ||
187 | |||
188 | mov convert { | ||
189 | pub trait From<T> {} | ||
190 | impl<T> From<T> for T {} | ||
181 | } | 191 | } |
182 | 192 | ||
183 | #[prelude_import] use result::*; | 193 | #[prelude_import] use result::*; |
184 | mod result { | 194 | mod result { |
185 | enum Infallible {} | 195 | use crate::convert::From; |
186 | enum Result<O, E> { | 196 | use crate::ops::{Try, FromResidual}; |
197 | |||
198 | pub enum Infallible {} | ||
199 | pub enum Result<O, E> { | ||
187 | Ok(O), | 200 | Ok(O), |
188 | Err(E) | 201 | Err(E) |
189 | } | 202 | } |
190 | 203 | ||
191 | impl<O, E> crate::ops::Try for Result<O, E> { | 204 | impl<O, E> Try for Result<O, E> { |
192 | type Output = O; | 205 | type Output = O; |
193 | type Error = Result<Infallible, E>; | 206 | type Error = Result<Infallible, E>; |
194 | } | 207 | } |
208 | |||
209 | impl<T, E, F: From<E>> FromResidual<Result<Infallible, E>> for Result<T, F> {} | ||
195 | } | 210 | } |
196 | "#, | 211 | "#, |
197 | ); | 212 | ); |