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 {}