impl<T: AsRawFd> AsRawFd for {Arc,Box}<T>
by jyn514 · Pull Request #97437 · rust-lang/rust (original) (raw)
This allows implementing traits that require a raw FD on Arc and Box.
Previously, you'd have to add the function to the trait itself:
trait MyTrait { fn as_raw_fd(&self) -> RawFd; }
impl<T: MyTrait> MyTrait for Arc { fn as_raw_fd(&self) -> RawFd { (**self).as_raw_fd() } }
In particular, this leads to lots of "multiple applicable items in scope" errors because you have to disambiguate MyTrait::as_raw_fd
from AsRawFd::as_raw_fd
at each call site. In generic contexts, when passing the type to a function that takes impl AsRawFd
it's also sometimes required to use T: MyTrait + AsRawFd
, which wouldn't be necessary if I could write MyTrait: AsRawFd
.
After this PR, the code can be simpler:
trait MyTrait: AsRawFd {}
impl<T: MyTrait> MyTrait for Arc {}