# HG changeset patch # User Tuomo Valkonen # Date 1747103164 18000 # Node ID d65377920b005b840ec6ebd9b28547f9a06b27e0 # Parent 2b13f8a0c8ba27411dfe2e0829a43bd7d6e96bb1 instance-lifetime-fubar diff -r 2b13f8a0c8ba -r d65377920b00 src/direct_product.rs --- a/src/direct_product.rs Mon May 12 20:40:14 2025 -0500 +++ b/src/direct_product.rs Mon May 12 21:26:04 2025 -0500 @@ -397,13 +397,9 @@ .eval_decompose(|a| self.1.eval_decompose(|b| f(Pair(a, b)))) } - fn eval_ref_decompose<'b, R>( - &'b self, - f: impl FnOnce(Pair, Q::Reference<'b>>) -> R, - ) -> R + fn eval_ref_decompose(&self, f: F) -> R where - Pair: 'b, - Self: 'b, + F: for<'c> FnOnce(Pair, Q::Reference<'c>>) -> R, { self.0 .eval_ref_decompose(|a| self.1.eval_ref_decompose(|b| f(Pair(a, b)))) @@ -439,6 +435,7 @@ f: impl FnOnce(Pair, Q::Decomposition<'b>>) -> R, ) -> R where + R: 'b, Pair: 'b, Self: 'b, { @@ -448,13 +445,11 @@ }) } - fn eval_ref_decompose<'b, R>( - &'b self, - f: impl FnOnce(Pair, Q::Reference<'b>>) -> R, - ) -> R + fn eval_ref_decompose<'b, 'c, R, F>(&'b self, f: F) -> R where - Pair: 'b, + Pair: 'c, Self: 'b, + F: FnOnce(Pair, Q::Reference<'c>>) -> R, { self.0 .eval_ref_decompose(|a| self.1.eval_ref_decompose(|b| f(Pair(a, b)))) diff -r 2b13f8a0c8ba -r d65377920b00 src/instance.rs --- a/src/instance.rs Mon May 12 20:40:14 2025 -0500 +++ b/src/instance.rs Mon May 12 21:26:04 2025 -0500 @@ -112,15 +112,18 @@ /// Consumes self. fn eval_decompose<'b, R>(self, f: impl FnOnce(D::Decomposition<'b>) -> R) -> R where + R: 'b, X: 'b, Self: 'b; /// Does a light decomposition of self `decomposer`, and evaluates `f` on the result. /// Does not consume self. - fn eval_ref_decompose<'b, R>(&'b self, f: impl FnOnce(D::Reference<'b>) -> R) -> R + fn eval_ref_decompose<'b, 'c, R, F>(&'b self, f: F) -> R where - X: 'b, - Self: 'b; + X: 'c, + Self: 'b, + R: 'b, + F: FnOnce(D::Reference<'c>) -> R; /// Returns an owned instance of `X`, cloning or converting non-true instances when necessary. fn own(self) -> X; @@ -175,10 +178,9 @@ } #[inline] - fn eval_ref_decompose<'b, R>(&'b self, f: impl FnOnce(&'b X) -> R) -> R + fn eval_ref_decompose(&self, f: F) -> R where - X: 'b, - Self: 'b, + F: for<'a> FnOnce(&'a X) -> R, { f(self) } @@ -208,10 +210,9 @@ } #[inline] - fn eval_ref_decompose<'b, R>(&'b self, f: impl FnOnce(&'b X) -> R) -> R + fn eval_ref_decompose(&self, f: F) -> R where - X: 'b, - Self: 'b, + F: for<'c> FnOnce(&'c X) -> R, { f(*self) } @@ -241,10 +242,9 @@ } #[inline] - fn eval_ref_decompose<'b, R>(&'b self, f: impl FnOnce(&'b X) -> R) -> R + fn eval_ref_decompose(&self, f: F) -> R where - X: 'b, - Self: 'b, + F: for<'c> FnOnce(&'c X) -> R, { f(*self) } @@ -275,10 +275,9 @@ } #[inline] - fn eval_ref_decompose<'b, R>(&'b self, f: impl FnOnce(&'b X) -> R) -> R + fn eval_ref_decompose(&self, f: F) -> R where - X: 'b, - Self: 'b, + F: for<'c> FnOnce(&'c X) -> R, { match self { MyCow::Borrowed(a) => f(a),