-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Can't use bound lifetime parameter 'self
on &self
in trait impl
#8355
Comments
This is not a bug, in the sense that the type system is working as designed. I do not think you can design an iterator that owns content and gives out pointers to it, at least not using the current iterator trait. To do so, you'd have to modify the iterator trait to always give out In this case, though, I think you don't need any lifetimes. I would implement
If Type system geekery follows: If we did want to extend the type system to permit the kinds of things you are attempting to do -- and similar problems have arisen in other contexts -- I am honestly not sure how best to do it. The lifetime |
The implementation of I fully admit that I don't perfectly grok lifetimes yet. What would be the fallout of allowing arbitrary lifetime bounds to be added to a trait function impl, i.e. |
Don't lint `needless_borrow` in method receiver positions fixes rust-lang#8408 fixes rust-lang#8407 fixes rust-lang#8391 fixes rust-lang#8367 fixes rust-lang#8380 This is a temporary fix for `needless_borrow`. The proper fix is included in rust-lang#8355. This should probably be merged into rustc before beta branches on Friday. This issue has been reported six or seven times in the past couple of weeks. changelog: Fix various issues with `needless_borrow` n´. Note to changelog writer: those issues might have been introduced in this release cycle, so this might not matter in the changelog.
Add lint `explicit_auto_deref` take 2 fixes: rust-lang#234 fixes: rust-lang#8367 fixes: rust-lang#8380 Still things to do: * ~~This currently only lints `&*<expr>` when it doesn't trigger `needless_borrow`.~~ * ~~This requires a borrow after a deref to trigger. So `*<expr>` changing `&&T` to `&T` won't be caught.~~ * The `deref` and `deref_mut` trait methods aren't linted. * Neither ~~field accesses~~, nor method receivers are linted. * ~~This probably shouldn't lint reborrowing.~~ * Full slicing to deref should probably be handled here as well. e.g. `&vec[..]` when just `&vec` would do changelog: new lint `explicit_auto_deref`
A lifetime parameter declared on the
impl
line of a trait cannot be used on&self
in the function impls. This is rather problematic when the lifetime parameter is needed as part of the trait type parameters.Here's an example:
Compiling this gives the error
Removing the
'self
on&'self mut self
also doesn't work. Nor does trying to usefn next<'r>(&'r mut self) ...
The text was updated successfully, but these errors were encountered: