diff options
| author | PankajChaudhary5 <pankajchaudhary172@gmail.com> | 2020-03-30 23:16:44 +0530 |
|---|---|---|
| committer | pankajchaudhary5 <pankajchaudhary172@gmail.com> | 2020-04-13 13:36:22 +0530 |
| commit | 908436f3bb9e41721f01099baecd68a48b8cf933 (patch) | |
| tree | b608c7ebe784a5bad93f40611248f4266bdaf37b /src/librustc_error_codes/error_codes | |
| parent | 0afdf43dc1d9be4c8b422840166b51dd99e56a16 (diff) | |
| download | rust-908436f3bb9e41721f01099baecd68a48b8cf933.tar.gz rust-908436f3bb9e41721f01099baecd68a48b8cf933.zip | |
Add proper explanation of error code E0657
Diffstat (limited to 'src/librustc_error_codes/error_codes')
| -rw-r--r-- | src/librustc_error_codes/error_codes/E0657.md | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/librustc_error_codes/error_codes/E0657.md b/src/librustc_error_codes/error_codes/E0657.md new file mode 100644 index 00000000000..7fe48c51147 --- /dev/null +++ b/src/librustc_error_codes/error_codes/E0657.md @@ -0,0 +1,57 @@ +A lifetime bound on a trait implementation was captured at an incorrect place. + +Erroneous code example: + +```compile_fail,E0657 +trait Id<T> {} +trait Lt<'a> {} + +impl<'a> Lt<'a> for () {} +impl<T> Id<T> for T {} + +fn free_fn_capture_hrtb_in_impl_trait() + -> Box<for<'a> Id<impl Lt<'a>>> // error! +{ + Box::new(()) +} + +struct Foo; +impl Foo { + fn impl_fn_capture_hrtb_in_impl_trait() + -> Box<for<'a> Id<impl Lt<'a>>> // error! + { + Box::new(()) + } +} +``` + +Here, you have used the inappropriate lifetime in the `impl Trait`, +The `impl Trait` can only capture lifetimes bound at the fn or impl +level. + +To fix this we have to define the lifetime at the function or impl +level and use that lifetime in the `impl Trait`. For example you can +define the lifetime at the function: + +``` +trait Id<T> {} +trait Lt<'a> {} + +impl<'a> Lt<'a> for () {} +impl<T> Id<T> for T {} + +fn free_fn_capture_hrtb_in_impl_trait<'b>() + -> Box<for<'a> Id<impl Lt<'b>>> // ok! +{ + Box::new(()) +} + +struct Foo; +impl Foo { + fn impl_fn_capture_hrtb_in_impl_trait<'b>() + -> Box<for<'a> Id<impl Lt<'b>>> // ok! + { + Box::new(()) + } +} +``` |
