//@ 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(data: &T) -> &'static T { fn helper(data: &T) -> R { R::from_ref(data) } helper(data) } fn main() { let s = "specialization".to_owned(); println!("{:?}", make_static(s.as_str())); }