Add a test for #55731
This commit is contained in:
parent
776411bb5a
commit
b7763af526
52
src/test/ui/issues/issue-55731.rs
Normal file
52
src/test/ui/issues/issue-55731.rs
Normal file
@ -0,0 +1,52 @@
|
||||
use std::marker::PhantomData;
|
||||
|
||||
trait DistributedIterator {
|
||||
fn reduce(self)
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
trait DistributedIteratorMulti<Source> {
|
||||
type Item;
|
||||
}
|
||||
|
||||
struct Connect<I>(PhantomData<fn(I)>);
|
||||
impl<I: for<'a> DistributedIteratorMulti<&'a ()>> DistributedIterator for Connect<I> where {}
|
||||
|
||||
struct Cloned<Source>(PhantomData<fn(Source)>);
|
||||
impl<'a, Source> DistributedIteratorMulti<&'a Source> for Cloned<&'a Source> {
|
||||
type Item = ();
|
||||
}
|
||||
|
||||
struct Map<I, F> {
|
||||
i: I,
|
||||
f: F,
|
||||
}
|
||||
impl<I: DistributedIteratorMulti<Source>, F, Source> DistributedIteratorMulti<Source> for Map<I, F>
|
||||
where
|
||||
F: A<<I as DistributedIteratorMulti<Source>>::Item>,
|
||||
{
|
||||
type Item = ();
|
||||
}
|
||||
|
||||
trait A<B> {}
|
||||
|
||||
struct X;
|
||||
impl A<()> for X {}
|
||||
|
||||
fn multi<I>(_reducer: I)
|
||||
where
|
||||
I: for<'a> DistributedIteratorMulti<&'a ()>,
|
||||
{
|
||||
DistributedIterator::reduce(Connect::<I>(PhantomData))
|
||||
}
|
||||
|
||||
fn main() {
|
||||
multi(Map { //~ ERROR implementation of `DistributedIteratorMulti` is not general enough
|
||||
i: Cloned(PhantomData),
|
||||
f: X,
|
||||
});
|
||||
}
|
12
src/test/ui/issues/issue-55731.stderr
Normal file
12
src/test/ui/issues/issue-55731.stderr
Normal file
@ -0,0 +1,12 @@
|
||||
error: implementation of `DistributedIteratorMulti` is not general enough
|
||||
--> $DIR/issue-55731.rs:48:5
|
||||
|
|
||||
LL | multi(Map { //~ ERROR implementation of `DistributedIteratorMulti` is not general enough
|
||||
| ^^^^^
|
||||
|
|
||||
= note: Due to a where-clause on `multi`,
|
||||
= note: `Map<Cloned<&()>, X>` must implement `DistributedIteratorMulti<&'0 ()>`, for any lifetime `'0`
|
||||
= note: but `Map<Cloned<&()>, X>` actually implements `DistributedIteratorMulti<&'1 ()>`, for some specific lifetime `'1`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
Loading…
x
Reference in New Issue
Block a user