---
# System prepended metadata

title: ITE meeting 2023-09-28
tags: [' triage-meeting', impl-trait-everywhere, ' minutes']

---

---
title: ITE meeting 2023-09-28
tags: impl-trait-everywhere, triage-meeting, minutes
date: 2023-09-28
discussion: https://rust-lang.zulipchat.com/#narrow/stream/315482-t-compiler.2Fetc.2Fopaque-types/topic/ITE.20triage.20meeting.202023-09-28
url: https://hackmd.io/yVvIGMfMRqqqI1DUtr2dsw
---

# ITE meeting agenda

- Meeting date: 2023-09-28

## Attendance

- People: TC, tmandry, compiler-errors

## Meeting roles

- Minutes: TC

## Announcements or custom items

(Meeting attendees, feel free to add items here!)

## Project board issues

### "Add async_fn_in_trait lint" rust#116040

- **Link:** https://github.com/rust-lang/rust/pull/116184
- **Labels:** S-waiting-on-review, T-compiler

CE: I agree with the feedback from petrochenkov that we should only lint in publicly-reachable places.

(Discussion about how in the T-lang meeting there was ambivalence.)

CE: I've going to apply petrochenkov's suggestion.

### AFIT/RPITIT stabilization

CE: I've been pinging people to check boxes.

CE: lcnr resolved the concern lcnr had.

CE: As TC and I discussed in the last meeting, if we get everyone to check the box before the middle of next month, we can get this out by the end of the year.

### "Consider alias bounds when computing liveness in NLL" rust#116040

- **Link:** https://github.com/rust-lang/rust/pull/116040
- **Labels:** S-waiting-on-review, T-types

CE: Niko needs to review this.

---

We discussed the limitations of this PR.  E.g., the lifetimes that an opaque type captures affects type equality.  CE provided this example:

```rust
trait Captures<'a> {}
impl<T> Captures<'_> for T {}

fn foo<'a: 'a>() -> impl Sized + Captures<'a> + 'static {}

fn eq<T>(_: T, _: T) {}

fn test<'i, 'j>() {
    eq(foo::<'i>(), foo::<'j>());
}
```

We also discussed the case of multiple lifetimes.  CE provided this example of something that doesn't work:

```rust
trait Captures<T> {}
impl<T, U> Captures<T> for U {}

fn foo<'a: 'a, 'b: 'b, 'c: 'c>(x: &'c Vec<u8>) -> impl Sized + Captures<(&'a (), &'b (), &'c ())> {}

// error[E0716]: temporary value dropped while borrowed
fn bar<'a: 'b, 'b>() {
    fn outlives<'o, T: 'o>(_: T) {}
    outlives::<'b>(foo::<'a, 'b, '_>(&vec![]));
}
```

TC pointed out that we can always make this case work at the expense of adding a new early-bound lifetime parameter by transforming `fn callee<P1, .., Pn>(..) -> impl Trait` into `fn callee<'o, P1: 'o, .., Pn: 'o>(..) -> impl Trait + 'o`.  CE agreed with this and noted that it does make the PR more widely applicable than it initially appears.

We then discussed how the PR makes this case work:

```rust
trait Captures<T> {}
impl<T, U> Captures<T> for U {}

fn foo<'o, T>(t: T) -> impl Sized + 'o {}
fn test<'o>(x: ()) -> impl Sized + 'o {
    foo::<'o, _>(&x)
}
```

The problem had been how to represent the type when that type contains a lifetime that's only valid within the function.  CE described how this is handled in the PR by substituting the erased lifetime for the concrete lifetime.

(The meeting ended here.)

### "Weird interaction between specialization and RPITITs" #108309

- **Link:** https://github.com/rust-lang/rust/issues/108309

### "Exponential compile times for chained RPITIT" #102527

- **Link:** https://github.com/rust-lang/rust/issues/102527

### "Mysterious "higher-ranked lifetime error" with async fn in trait and return-type notation" #110963

- **Link:** https://github.com/rust-lang/rust/issues/110963

### "AFIT: strange errors on circular impls" #112626

- **Link:** https://github.com/rust-lang/rust/issues/112626

### "Nightly (warning): Async traits Self return requires type specification" #113538

- **Link:** https://github.com/rust-lang/rust/issues/113538

## Pending PRs on the impl-trait-initiative repo

None.

## Open PRs

### "stricter hidden type wf-check" rust#115008

- **Link:** https://github.com/rust-lang/rust/pull/115008
- **Labels:** S-waiting-on-review, A-impl-trait, T-types, WG-trait-system-refactor

### "Stabilize `async fn` and return-position `impl Trait` in trait" rust#115822

- **Link:** https://github.com/rust-lang/rust/pull/115822
- **Labels:** T-lang, S-waiting-on-team, proposed-final-comment-period, disposition-merge, I-lang-nominated, F-async_fn_in_trait, T-types, F-return_position_impl_trait_in_trait
