diff options
| author | lcnr <rust@lcnr.de> | 2022-09-19 15:07:01 +0200 |
|---|---|---|
| committer | lcnr <rust@lcnr.de> | 2022-09-19 15:13:34 +0200 |
| commit | 72a21027f5bee367bd9ccbeecc2528986f85d90b (patch) | |
| tree | 4fb61fb717c43ecb8307bb016789051d485c16b6 /src | |
| parent | 71f8fd5c5859fa09587486351f849277a910e4d9 (diff) | |
| download | rust-72a21027f5bee367bd9ccbeecc2528986f85d90b.tar.gz rust-72a21027f5bee367bd9ccbeecc2528986f85d90b.zip | |
add test
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/implied-bounds/issue-101951.rs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/test/ui/implied-bounds/issue-101951.rs b/src/test/ui/implied-bounds/issue-101951.rs new file mode 100644 index 00000000000..108fef8a15f --- /dev/null +++ b/src/test/ui/implied-bounds/issue-101951.rs @@ -0,0 +1,50 @@ +// Taken directly from that issue. +// +// This test detected that we didn't correctly resolve +// inference variables when computing implied bounds. +// +// check-pass +pub trait BuilderFn<'a> { + type Output; +} + +impl<'a, F, Out> BuilderFn<'a> for F +where + F: FnOnce(&'a mut ()) -> Out, +{ + type Output = Out; +} + +pub trait ConstructionFirm { + type Builder: for<'a> BuilderFn<'a>; +} + +pub trait Campus<T> +where + T: ConstructionFirm, +{ + fn add_building( + &mut self, + building: &mut <<T as ConstructionFirm>::Builder as BuilderFn<'_>>::Output, + ); +} + +struct ArchitectsInc {} + +impl ConstructionFirm for ArchitectsInc { + type Builder = fn(&mut ()) -> PrettyCondo<'_>; +} + +struct PrettyCondo<'a> { + _marker: &'a mut (), +} + +struct CondoEstate {} + +impl Campus<ArchitectsInc> for CondoEstate { + fn add_building(&mut self, _building: &mut PrettyCondo<'_>) { + todo!() + } +} + +fn main() {} |
