summaryrefslogtreecommitdiffstats
path: root/src/test/ui/associated-types/associated-types-projection-to-unrelated-trait.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/associated-types/associated-types-projection-to-unrelated-trait.rs')
-rw-r--r--src/test/ui/associated-types/associated-types-projection-to-unrelated-trait.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/test/ui/associated-types/associated-types-projection-to-unrelated-trait.rs b/src/test/ui/associated-types/associated-types-projection-to-unrelated-trait.rs
new file mode 100644
index 000000000..3b8c8c019
--- /dev/null
+++ b/src/test/ui/associated-types/associated-types-projection-to-unrelated-trait.rs
@@ -0,0 +1,35 @@
+// run-pass
+// Check that we do not get an error when you use `<Self as Get>::Value` in
+// the trait definition if there is no default method and for every impl,
+// `Self` does implement `Get`.
+//
+// See also tests associated-types-no-suitable-supertrait
+// and associated-types-no-suitable-supertrait-2, which show how small
+// variants of the code below can fail.
+
+trait Get {
+ type Value;
+}
+
+trait Other {
+ fn okay<U:Get>(&self, foo: U, bar: <Self as Get>::Value)
+ where Self: Get;
+}
+
+impl Get for () {
+ type Value = f32;
+}
+
+impl Get for f64 {
+ type Value = u32;
+}
+
+impl Other for () {
+ fn okay<U:Get>(&self, _foo: U, _bar: <Self as Get>::Value) { }
+}
+
+impl Other for f64 {
+ fn okay<U:Get>(&self, _foo: U, _bar: <Self as Get>::Value) { }
+}
+
+fn main() { }