Skip to content

RFC: Remove cross borrowing entirely #139

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

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions active/0000-remove-cross-borrowing-entirely.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
- Start Date: 2014-06-25
- RFC PR #: (leave this empty)
- Rust Issue #: #10504

# Summary

Remove the coercion from `Box<T>` to `&T` from the language.

# Motivation

The coercion between `Box<T>` to `&T` is not replicable by user-defined smart pointers and has been found to be rarely used [1]. We already removed the coercion between `Box<T>` and `&mut T` in RFC 33.

# Detailed design

The coercion between `Box<T>` and `&T` should be removed.

Note that methods that take `&self` can still be called on values of type `Box<T>` without any special referencing or dereferencing. That is because the semantics of auto-deref and auto-ref conspire to make it work: the types unify after one autoderef followed by one autoref.

# Drawbacks

Borrowing from `Box<T>` to `&T` may be convenient.

# Alternatives

The impact of not doing this is that the coercion will remain.

# Unresolved questions

None.

[1]: https://github.com/rust-lang/rust/pull/15171