diff options
Diffstat (limited to 'tests/ui/traits/new-solver/negative-coherence-bounds.rs')
-rw-r--r-- | tests/ui/traits/new-solver/negative-coherence-bounds.rs | 40 |
1 files changed, 0 insertions, 40 deletions
diff --git a/tests/ui/traits/new-solver/negative-coherence-bounds.rs b/tests/ui/traits/new-solver/negative-coherence-bounds.rs deleted file mode 100644 index 5436b02c3..000000000 --- a/tests/ui/traits/new-solver/negative-coherence-bounds.rs +++ /dev/null @@ -1,40 +0,0 @@ -// check-pass - -// This test verifies that negative trait predicate cannot be satisfied from a -// positive param-env candidate. - -// Negative coherence is one of the only places where we actually construct and -// evaluate negative predicates. Specifically, when verifying whether the first -// and second impls below overlap, we do not want to consider them disjoint, -// otherwise the second impl would be missing an associated type `type Item` -// which is provided by the first impl that it is specializing. - -#![feature(specialization)] -//~^ WARN the feature `specialization` is incomplete -#![feature(with_negative_coherence)] - -trait BoxIter { - type Item; - - fn last(self) -> Option<Self::Item>; -} - -impl<I: Iterator + ?Sized> BoxIter for Box<I> { - type Item = I::Item; - - default fn last(self) -> Option<I::Item> { - todo!() - } -} - -// When checking that this impl does/doesn't overlap the one above, we evaluate -// a negative version of all of the where-clause predicates of the impl below. -// For `I: !Iterator`, we should make sure that the param-env clause `I: Iterator` -// from above doesn't satisfy this predicate. -impl<I: Iterator> BoxIter for Box<I> { - fn last(self) -> Option<I::Item> { - (*self).last() - } -} - -fn main() {} |