|  | //@ check-pass | 
|  | //@ revisions: current next | 
|  | //@ ignore-compare-mode-next-solver (explicit revisions) | 
|  | //@[next] compile-flags: -Znext-solver | 
|  | //@ edition: 2024 | 
|  |  | 
|  | // Regression test for <https://github.com/rust-lang/trait-system-refactor-initiative/issues/185>. | 
|  | // Avoid unnecessarily computing the RPITIT type of the first impl when checking the WF of the | 
|  | // second impl, since the first impl relies on the hidden type of the second impl. | 
|  |  | 
|  | use std::future::Future; | 
|  |  | 
|  | trait Handler {} | 
|  |  | 
|  | struct W<T>(T); | 
|  |  | 
|  | trait SendTarget { | 
|  | fn call(self) -> impl Future<Output = ()> + Send; | 
|  | } | 
|  |  | 
|  | impl<T> SendTarget for W<T> | 
|  | where | 
|  | T: Handler + Send, | 
|  | { | 
|  | async fn call(self) { | 
|  | todo!() | 
|  | } | 
|  | } | 
|  |  | 
|  | impl<T> SendTarget for T | 
|  | where | 
|  | T: Handler + Send, | 
|  | { | 
|  | async fn call(self) { | 
|  | W(self).call().await | 
|  | } | 
|  | } | 
|  |  | 
|  | fn main() {} |