@@ -1580,6 +1580,47 @@ where
1580
1580
```
1581
1581
"## ,
1582
1582
1583
+ E0495 : r##"
1584
+ A lifetime cannot be determined in the given situation.
1585
+
1586
+ Erroneous code example:
1587
+
1588
+ ```compile_fail,E0495
1589
+ fn transmute_lifetime<'a, 'b, T>(t: &'a (T,)) -> &'b T {
1590
+ match (&t,) { // error!
1591
+ ((u,),) => u,
1592
+ }
1593
+ }
1594
+
1595
+ let y = Box::new((42,));
1596
+ let x = transmute_lifetime(&y);
1597
+ ```
1598
+
1599
+ In this code, you have two ways to solve this issue:
1600
+ 1. Enforce that `'a` lives at least as long as `'b`.
1601
+ 2. Use the same lifetime requirement for both input and output values.
1602
+
1603
+ So for the first solution, you can do it by replacing `'a` with `'a: 'b`:
1604
+
1605
+ ```
1606
+ fn transmute_lifetime<'a: 'b, 'b, T>(t: &'a (T,)) -> &'b T {
1607
+ match (&t,) { // ok!
1608
+ ((u,),) => u,
1609
+ }
1610
+ }
1611
+ ```
1612
+
1613
+ In the second you can do it by simply removing `'b` so they both use `'a`:
1614
+
1615
+ ```
1616
+ fn transmute_lifetime<'a, T>(t: &'a (T,)) -> &'a T {
1617
+ match (&t,) { // ok!
1618
+ ((u,),) => u,
1619
+ }
1620
+ }
1621
+ ```
1622
+ "## ,
1623
+
1583
1624
E0496 : r##"
1584
1625
A lifetime name is shadowing another lifetime name. Erroneous code example:
1585
1626
@@ -2275,8 +2316,6 @@ rejected in your own crates.
2275
2316
E0488 , // lifetime of variable does not enclose its declaration
2276
2317
E0489 , // type/lifetime parameter not in scope here
2277
2318
E0490 , // a value of type `..` is borrowed for too long
2278
- E0495 , // cannot infer an appropriate lifetime due to conflicting
2279
- // requirements
2280
2319
E0566 , // conflicting representation hints
2281
2320
E0623 , // lifetime mismatch where both parameters are anonymous regions
2282
2321
E0628 , // generators cannot have explicit parameters
0 commit comments