25 lines
600 B
Rust
25 lines
600 B
Rust
|
// run-pass
|
||
|
|
||
|
// Makes sure we don't propagate generic instances of `Self: ?Sized` blanket impls.
|
||
|
// This is relevant when we have an overlapping impl and builtin dyn instance.
|
||
|
// See <https://github.com/rust-lang/rust/pull/114941> for more context.
|
||
|
|
||
|
trait Trait {
|
||
|
fn foo(&self) -> &'static str;
|
||
|
}
|
||
|
|
||
|
impl<T: ?Sized> Trait for T {
|
||
|
fn foo(&self) -> &'static str {
|
||
|
std::any::type_name::<T>()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const fn bar<T: ?Sized>() -> fn(&T) -> &'static str {
|
||
|
Trait::foo
|
||
|
// If const prop were to propagate the instance
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
assert_eq!("i32", bar::<dyn Trait>()(&1i32));
|
||
|
}
|