diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:02:58 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:02:58 +0000 |
commit | 698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch) | |
tree | 173a775858bd501c378080a10dca74132f05bc50 /src/test/ui/traits/issue-52893.rs | |
parent | Initial commit. (diff) | |
download | rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip |
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | src/test/ui/traits/issue-52893.rs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/test/ui/traits/issue-52893.rs b/src/test/ui/traits/issue-52893.rs new file mode 100644 index 000000000..d72598d5d --- /dev/null +++ b/src/test/ui/traits/issue-52893.rs @@ -0,0 +1,57 @@ +// check-fail +// +// regression test for issue 52893 +trait At<Name> { + type AtRes; + fn at(self) -> Self::AtRes; +} + +trait Push<T> { + type PushRes; + fn push(self, other: T) -> Self::PushRes; +} + +trait AddClass<Name, F> { + type AddRes; + fn init(self, func: F); +} + +trait ToRef { + type RefRes; + fn to_ref(&self) -> Self::RefRes; +} + +struct Class<P>(P); + +impl<P> Class<P> { + fn with<Name, F>(self) -> <Self as AddClass<Name, F>>::AddRes + where + Self: AddClass<Name, F>, + { + todo!() + } + + fn from<F>(self) -> <Self as AddClass<P, F>>::AddRes + where + Self: AddClass<P, F>, + { + todo!() + } +} + +impl<F, Name, P> AddClass<Name, F> for Class<P> +where + Self: At<Name>, + <Self as At<Name>>::AtRes: Push<F>, + <<Self as At<Name>>::AtRes as Push<F>>::PushRes: ToRef<RefRes = Self> + Push<F>, +{ + type AddRes = (); + + fn init(self, func: F) { + let builder = self.at().push(func); + let output = builder.to_ref(); + builder.push(output); //~ ERROR mismatched types [E0308] + } +} + +fn main() {} |