diff options
Diffstat (limited to '')
-rw-r--r-- | src/test/ui/nll/issue-57642-higher-ranked-subtype.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/test/ui/nll/issue-57642-higher-ranked-subtype.rs b/src/test/ui/nll/issue-57642-higher-ranked-subtype.rs new file mode 100644 index 000000000..eba859cde --- /dev/null +++ b/src/test/ui/nll/issue-57642-higher-ranked-subtype.rs @@ -0,0 +1,38 @@ +// Regression test for issue #57642 +// Tests that we reject a bad higher-ranked subtype + +trait X { + type G; + fn make_g() -> Self::G; +} + +impl<'a> X for fn(&'a ()) { + type G = &'a (); + + fn make_g() -> Self::G { + &() + } +} + +trait Y { + type F; + fn make_f() -> Self::F; +} + +impl<T> Y for fn(T) { + type F = fn(T); + + fn make_f() -> Self::F { + |_| {} + } +} + +fn higher_ranked_region_has_lost_its_binder() { + let x = <fn (&())>::make_g(); //~ ERROR the function +} + +fn magical() { + let x = <fn (&())>::make_f(); //~ ERROR no function +} + +fn main() {} |