summaryrefslogtreecommitdiffstats
path: root/src/test/ui/traits/object-one-type-two-traits.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/traits/object-one-type-two-traits.rs')
-rw-r--r--src/test/ui/traits/object-one-type-two-traits.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/test/ui/traits/object-one-type-two-traits.rs b/src/test/ui/traits/object-one-type-two-traits.rs
new file mode 100644
index 000000000..86a2094ee
--- /dev/null
+++ b/src/test/ui/traits/object-one-type-two-traits.rs
@@ -0,0 +1,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();
+}