Add a regression test for issue-54108
This commit is contained in:
parent
32bc245bc0
commit
ebc1f89ecf
2 changed files with 59 additions and 0 deletions
41
src/test/ui/associated-types/issue-54108.rs
Normal file
41
src/test/ui/associated-types/issue-54108.rs
Normal 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 {});
|
||||
}
|
||||
18
src/test/ui/associated-types/issue-54108.stderr
Normal file
18
src/test/ui/associated-types/issue-54108.stderr
Normal 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`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue