| //@ check-pass |
| //@ known-bug: #40582 |
| |
| // Should fail. Should not be possible to implement `make_static`. |
| |
| #![feature(specialization)] |
| #![allow(incomplete_features)] |
| |
| trait FromRef<'a, T: ?Sized> { |
| fn from_ref(r: &'a T) -> Self; |
| } |
| |
| impl<'a, T: ?Sized> FromRef<'a, T> for &'a T { |
| fn from_ref(r: &'a T) -> Self { |
| r |
| } |
| } |
| |
| impl<'a, T: ?Sized, R> FromRef<'a, T> for R { |
| default fn from_ref(_: &'a T) -> Self { |
| unimplemented!() |
| } |
| } |
| |
| fn make_static<T: ?Sized>(data: &T) -> &'static T { |
| fn helper<T: ?Sized, R>(data: &T) -> R { |
| R::from_ref(data) |
| } |
| helper(data) |
| } |
| |
| fn main() { |
| let s = "specialization".to_owned(); |
| println!("{:?}", make_static(s.as_str())); |
| } |