blob: 21033312fe2770fba782aab6176b02f9877d4d47 [file] [edit]
//@ revisions: next old
//@[next] compile-flags: -Znext-solver
//@ ignore-compare-mode-next-solver (explicit revisions)
#![feature(try_as_dyn)]
//@ check-pass
use std::any::try_as_dyn;
struct Thing<T>(T);
trait Trait {}
impl<T> Trait for Thing<T> {}
const _: () = {
let thing = Thing(1);
assert!(try_as_dyn::<_, dyn Trait>(&thing).is_some());
};
struct Thing2<T>(T);
impl<T: std::fmt::Debug> Trait for Thing2<T> {}
struct NoDebug;
const _: () = {
let thing = Thing2(1);
assert!(try_as_dyn::<_, dyn Trait>(&thing).is_some());
let thing = Thing2(NoDebug);
assert!(try_as_dyn::<_, dyn Trait>(&thing).is_none());
};
trait Trait2 {}
impl<'a, 'b> Trait2 for &'a &'b () {}
struct Thing3<T>(T);
impl<T: Trait2> Trait for Thing3<T> {}
const _: () = {
let thing = Thing3(&&());
assert!(try_as_dyn::<_, dyn Trait2>(&thing).is_none());
};
fn main() {}