1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
//@ run-pass
#![allow(dead_code)]
#![allow(unused_variables)]
// Testing creating two vtables with the same self type, but different
// traits.
use std::any::Any;
trait Wrap {
fn get(&self) -> isize;
fn wrap(self: Box<Self>) -> Box<dyn Any+'static>;
}
impl Wrap for isize {
fn get(&self) -> isize {
*self
}
fn wrap(self: Box<isize>) -> Box<dyn Any+'static> {
self as Box<dyn Any+'static>
}
}
fn is<T:Any>(x: &dyn Any) -> bool {
x.is::<T>()
}
fn main() {
let x = Box::new(22isize) as Box<dyn Wrap>;
println!("x={}", x.get());
let y = x.wrap();
}
|