# A function \`as\_borowed\_mut\` for pointers

**URL:** <https://internals.rust-lang.org/t/a-function-as-borowed-mut-for-pointers/18477>\
**Category:** Uncategorized\
**Created:** [March 6, 2023, 1:35pm UTC](https://internals.rust-lang.org/t/a-function-as-borowed-mut-for-pointers/18477 "2023-03-06T13:35:51Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![fdasfe](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/fdasfe/32/13939_2.png) [@fdasfe](https://internals.rust-lang.org/u/fdasfe)\
**Post date:** [March 6, 2023, 1:35pm UTC](https://internals.rust-lang.org/t/a-function-as-borowed-mut-for-pointers/18477/1 "2023-03-06T13:35:51Z")

</div>

I propose to add a new function `as_borowed_mut` that has a signature of `as_borowed_mut<'a,T,U>( src:*mut ,from:&'a mut U) ->&'a mut T`. This function as the existing function `as_mut` does but prevents the use of the original reference until the old one is dropped.

example:

```rust
let x:usize = 10;
let y = &mut x;
let z = as_borowed_mut(y as *mut usize,y);
*y; //fails because x is mutably borrowed by z
drop(z);
*y;//works

```

---

<div class="post-metadata">

**Author:** ![bjorn3](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/bjorn3/32/2736_2.png) [@bjorn3](https://internals.rust-lang.org/u/bjorn3)\
**Post date:** [March 6, 2023, 1:41pm UTC](https://internals.rust-lang.org/t/a-function-as-borowed-mut-for-pointers/18477/2 "2023-03-06T13:41:33Z")

</div>

What is the benefit of this? And how will it be implemented?

---

<div class="post-metadata">

**Author:** ![steffahn](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/steffahn/32/13288_2.png) [@steffahn](https://internals.rust-lang.org/u/steffahn)\
**Post date:** [March 6, 2023, 2:34pm UTC](https://internals.rust-lang.org/t/a-function-as-borowed-mut-for-pointers/18477/3 "2023-03-06T14:34:19Z")

</div>

```plaintext
error: expected type, found `,`
 --> src/lib.rs:2:34
  |
2 | as_borowed_mut<'a,T,U>( src:*mut ,from:&'a mut U) ->&'a mut T
  | ^ expected type

```

---

<div class="post-metadata">

**Author:** ![system](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/system/32/14092_2.png) [@system](https://internals.rust-lang.org/u/system)\
**Post date:** [June 4, 2023, 2:34pm UTC](https://internals.rust-lang.org/t/a-function-as-borowed-mut-for-pointers/18477/4 "2023-06-04T14:34:46Z")

</div>

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.
