]> git.lizzy.rs Git - rust.git/blob - src/test/ui/higher-rank-trait-bounds/hrtb-cache-issue-54302.rs
Rollup merge of #100462 - zohnannor:master, r=thomcc
[rust.git] / src / test / ui / higher-rank-trait-bounds / hrtb-cache-issue-54302.rs
1 // Regression test for #54302.
2 //
3 // We were incorrectly using the "evaluation cache" (which ignored
4 // region results) to conclude that `&'static str: Deserialize`, even
5 // though it would require that `for<'de> 'de: 'static`, which is
6 // clearly false.
7
8 trait Deserialize<'de> {}
9
10 trait DeserializeOwned: for<'de> Deserialize<'de> {}
11 impl<T> DeserializeOwned for T where T: for<'de> Deserialize<'de> {}
12
13 // Based on this impl, `&'static str` only implements Deserialize<'static>.
14 // It does not implement for<'de> Deserialize<'de>.
15 impl<'de: 'a, 'a> Deserialize<'de> for &'a str {}
16
17 fn main() {
18     fn assert_deserialize_owned<T: DeserializeOwned>() {}
19     assert_deserialize_owned::<&'static str>(); //~ ERROR
20
21     // It correctly does not implement for<'de> Deserialize<'de>.
22     // fn assert_hrtb<T: for<'de> Deserialize<'de>>() {}
23     // assert_hrtb::<&'static str>();
24 }