//@ compile-flags: -Znext-solver //@ check-pass //@ edition: 2024 // Ensure we don't end up in a query cycle due to trying to assemble an impl candidate // for an RPITIT normalizes-to goal, even though that impl candidate would *necessarily* // be made rigid by a where clause. This query cycle is thus avoidable by not assembling // that impl candidate which we *know* we are going to throw away anyways. use std::future::Future; pub trait ReactiveFunction: Send { type Output; fn invoke(self) -> Self::Output; } trait AttributeValue { fn resolve(self) -> impl Future + Send; } impl AttributeValue for F where F: ReactiveFunction, V: AttributeValue, { async fn resolve(self) { self.invoke().resolve().await } } fn main() {}