diff options
Diffstat (limited to 'src/test/ui/associated-types/associated-types-projection-bound-in-supertraits.rs')
-rw-r--r-- | src/test/ui/associated-types/associated-types-projection-bound-in-supertraits.rs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/test/ui/associated-types/associated-types-projection-bound-in-supertraits.rs b/src/test/ui/associated-types/associated-types-projection-bound-in-supertraits.rs new file mode 100644 index 000000000..107e6b4ce --- /dev/null +++ b/src/test/ui/associated-types/associated-types-projection-bound-in-supertraits.rs @@ -0,0 +1,23 @@ +// run-pass +#![allow(unused_variables)] +// Test that we correctly handle projection bounds appearing in the +// supertrait list (and in conjunction with overloaded operators). In +// this case, the `Result=Self` binding in the supertrait listing of +// `Int` was being ignored. + +trait Not { + type Result; + + fn not(self) -> Self::Result; +} + +trait Int: Not<Result=Self> + Sized { + fn count_ones(self) -> usize; + fn count_zeros(self) -> usize { + // neither works + let x: Self = self.not(); + 0 + } +} + +fn main() { } |