about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-03-27 10:07:49 -0700
committerAlex Crichton <alex@alexcrichton.com>2015-03-27 10:07:49 -0700
commit7d79a4facd6cd26ff06d99ef4bbb2b35003de28e (patch)
tree7de48d79407b29b20376345a1f8c9623449b2ab3 /src/libcore
parent55c398d651e6b3e4f469325a35e029059ce36f1e (diff)
parente7525cf6200e5b62a4b1a2f3131f68d946fb331e (diff)
downloadrust-7d79a4facd6cd26ff06d99ef4bbb2b35003de28e.tar.gz
rust-7d79a4facd6cd26ff06d99ef4bbb2b35003de28e.zip
rollup merge of #23753: aturon/revise-convert
This commit revises `path` and `os_str` to use blanket impls for `From`
on reference types. This both cuts down on the number of required impls,
and means that you can pass through e.g. `T: AsRef<OsStr>` to
`PathBuf::from` without an intermediate call to `as_ref`.

It also makes a FIXME note for later generalizing the blanket impls for
`AsRef` and `AsMut` to use `Deref`/`DerefMut`, once it is possible to do
so.
Diffstat (limited to 'src/libcore')
-rw-r--r--src/libcore/convert.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/libcore/convert.rs b/src/libcore/convert.rs
index 65a226d37cb..21f9b1f5513 100644
--- a/src/libcore/convert.rs
+++ b/src/libcore/convert.rs
@@ -69,6 +69,14 @@ impl<'a, T: ?Sized, U: ?Sized> AsRef<U> for &'a mut T where T: AsRef<U> {
     }
 }
 
+// FIXME (#23442): replace the above impls for &/&mut with the following more general one:
+// // As lifts over Deref
+// impl<D: ?Sized + Deref, U: ?Sized> AsRef<U> for D where D::Target: AsRef<U> {
+//     fn as_ref(&self) -> &U {
+//         self.deref().as_ref()
+//     }
+// }
+
 // AsMut implies Into
 impl<'a, T: ?Sized, U: ?Sized> Into<&'a mut U> for &'a mut T where T: AsMut<U> {
     fn into(self) -> &'a mut U {
@@ -83,6 +91,14 @@ impl<'a, T: ?Sized, U: ?Sized> AsMut<U> for &'a mut T where T: AsMut<U> {
     }
 }
 
+// FIXME (#23442): replace the above impl for &mut with the following more general one:
+// // AsMut lifts over DerefMut
+// impl<D: ?Sized + Deref, U: ?Sized> AsMut<U> for D where D::Target: AsMut<U> {
+//     fn as_mut(&mut self) -> &mut U {
+//         self.deref_mut().as_mut()
+//     }
+// }
+
 // From implies Into
 impl<T, U> Into<U> for T where U: From<T> {
     fn into(self) -> U {