summaryrefslogtreecommitdiffstats
path: root/src/test/ui/associated-types/associated-types-eq-3.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/associated-types/associated-types-eq-3.rs')
-rw-r--r--src/test/ui/associated-types/associated-types-eq-3.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/test/ui/associated-types/associated-types-eq-3.rs b/src/test/ui/associated-types/associated-types-eq-3.rs
new file mode 100644
index 000000000..f6988dcf6
--- /dev/null
+++ b/src/test/ui/associated-types/associated-types-eq-3.rs
@@ -0,0 +1,42 @@
+// Test equality constraints on associated types. Check we get type errors
+// where we should.
+
+pub trait Foo {
+ type A;
+ fn boo(&self) -> <Self as Foo>::A;
+}
+
+struct Bar;
+
+impl Foo for isize {
+ type A = usize;
+ fn boo(&self) -> usize {
+ 42
+ }
+}
+
+fn foo1<I: Foo<A=Bar>>(x: I) {
+ let _: Bar = x.boo();
+}
+
+fn foo2<I: Foo>(x: I) {
+ let _: Bar = x.boo();
+ //~^ ERROR mismatched types
+ //~| found associated type `<I as Foo>::A`
+ //~| expected struct `Bar`, found associated type
+ //~| expected struct `Bar`
+}
+
+
+pub fn baz(x: &dyn Foo<A=Bar>) {
+ let _: Bar = x.boo();
+}
+
+
+pub fn main() {
+ let a = 42;
+ foo1(a);
+ //~^ ERROR type mismatch resolving
+ baz(&a);
+ //~^ ERROR type mismatch resolving
+}