about summary refs log tree commit diff
path: root/tests/ui/dst/dst-index.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/dst/dst-index.rs')
-rw-r--r--tests/ui/dst/dst-index.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/ui/dst/dst-index.rs b/tests/ui/dst/dst-index.rs
new file mode 100644
index 00000000000..2f2c5df4626
--- /dev/null
+++ b/tests/ui/dst/dst-index.rs
@@ -0,0 +1,37 @@
+// Test that overloaded index expressions with DST result types
+// can't be used as rvalues
+
+use std::ops::Index;
+use std::fmt::Debug;
+
+#[derive(Copy, Clone)]
+struct S;
+
+impl Index<usize> for S {
+    type Output = str;
+
+    fn index(&self, _: usize) -> &str {
+        "hello"
+    }
+}
+
+#[derive(Copy, Clone)]
+struct T;
+
+impl Index<usize> for T {
+    type Output = dyn Debug + 'static;
+
+    fn index<'a>(&'a self, idx: usize) -> &'a (dyn Debug + 'static) {
+        static x: usize = 42;
+        &x
+    }
+}
+
+fn main() {
+    S[0];
+    //~^ ERROR cannot move out of index of `S`
+    //~^^ ERROR E0161
+    T[0];
+    //~^ ERROR cannot move out of index of `T`
+    //~^^ ERROR E0161
+}