Add a regression test for issue-54108

This commit is contained in:
Yuki Okushi 2020-10-09 18:32:22 +09:00
parent 32bc245bc0
commit ebc1f89ecf
2 changed files with 59 additions and 0 deletions

View file

@ -0,0 +1,41 @@
use std::ops::Add;
pub trait Encoder {
type Size: Add<Output = Self::Size>;
fn foo(&self) -> Self::Size;
}
pub trait SubEncoder: Encoder {
type ActualSize;
fn bar(&self) -> Self::Size;
}
impl<T> Encoder for T
where
T: SubEncoder,
{
type Size = <Self as SubEncoder>::ActualSize;
//~^ ERROR: cannot add `<T as SubEncoder>::ActualSize` to `<T as SubEncoder>::ActualSize`
fn foo(&self) -> Self::Size {
self.bar() + self.bar()
}
}
pub struct UnitEncoder;
impl SubEncoder for UnitEncoder {
type ActualSize = ();
fn bar(&self) {}
}
pub fn fun<R: Encoder>(encoder: &R) {
encoder.foo();
}
fn main() {
fun(&UnitEncoder {});
}

View file

@ -0,0 +1,18 @@
error[E0277]: cannot add `<T as SubEncoder>::ActualSize` to `<T as SubEncoder>::ActualSize`
--> $DIR/issue-54108.rs:19:5
|
LL | type Size: Add<Output = Self::Size>;
| ------------------------ required by this bound in `Encoder::Size`
...
LL | type Size = <Self as SubEncoder>::ActualSize;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `<T as SubEncoder>::ActualSize + <T as SubEncoder>::ActualSize`
|
= help: the trait `Add` is not implemented for `<T as SubEncoder>::ActualSize`
help: consider further restricting the associated type
|
LL | T: SubEncoder, <T as SubEncoder>::ActualSize: Add
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.