summaryrefslogtreecommitdiffstats
path: root/tests/ui/regions/regions-trait-1.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/regions/regions-trait-1.rs')
-rw-r--r--tests/ui/regions/regions-trait-1.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/ui/regions/regions-trait-1.rs b/tests/ui/regions/regions-trait-1.rs
new file mode 100644
index 000000000..b6dab1c32
--- /dev/null
+++ b/tests/ui/regions/regions-trait-1.rs
@@ -0,0 +1,33 @@
+// check-pass
+
+struct Ctxt {
+ v: usize,
+}
+
+trait GetCtxt {
+ // Here the `&` is bound in the method definition:
+ fn get_ctxt(&self) -> &Ctxt;
+}
+
+struct HasCtxt<'a> {
+ c: &'a Ctxt,
+}
+
+impl<'a> GetCtxt for HasCtxt<'a> {
+ // Ok: Have implied bound of WF(&'b HasCtxt<'a>)
+ // so know 'a: 'b
+ // so know &'a Ctxt <: &'b Ctxt
+ fn get_ctxt<'b>(&'b self) -> &'a Ctxt {
+ self.c
+ }
+}
+
+fn get_v(gc: Box<dyn GetCtxt + '_>) -> usize {
+ gc.get_ctxt().v
+}
+
+fn main() {
+ let ctxt = Ctxt { v: 22 };
+ let hc = HasCtxt { c: &ctxt };
+ assert_eq!(get_v(Box::new(hc) as Box<dyn GetCtxt>), 22);
+}