]> git.lizzy.rs Git - rust.git/blob - src/test/ui/impl-trait/issues/issue-86800.rs
Merge commit '8f1ebdd18bdecc621f16baaf779898cc08cc2766' into clippyup
[rust.git] / src / test / ui / impl-trait / issues / issue-86800.rs
1 #![feature(type_alias_impl_trait)]
2
3 // edition:2021
4 // unset-rustc-env:RUST_BACKTRACE
5 // compile-flags:-Z treat-err-as-bug=1
6 // error-pattern:stack backtrace:
7 // failure-status:101
8 // normalize-stderr-test "note: .*" -> ""
9 // normalize-stderr-test "thread 'rustc' .*" -> ""
10 // normalize-stderr-test " +[0-9]+:.*\n" -> ""
11 // normalize-stderr-test " +at .*\n" -> ""
12
13 use std::future::Future;
14
15 struct Connection {
16 }
17
18 trait Transaction {
19 }
20
21 struct TestTransaction<'conn> {
22     conn: &'conn Connection
23 }
24
25 impl<'conn> Transaction for TestTransaction<'conn> {
26 }
27
28 struct Context {
29 }
30
31 type TransactionResult<O> = Result<O, ()>;
32
33 type TransactionFuture<'__, O> = impl '__ + Future<Output = TransactionResult<O>>;
34
35 fn execute_transaction_fut<'f, F, O>(
36     f: F,
37 ) -> impl FnOnce(&mut dyn Transaction) -> TransactionFuture<'_, O>
38 where
39     F: FnOnce(&mut dyn Transaction) -> TransactionFuture<'_, O> + 'f
40 {
41     f
42 }
43
44 impl Context {
45     async fn do_transaction<O>(
46         &self, f: impl FnOnce(&mut dyn Transaction) -> TransactionFuture<'_, O>
47     ) -> TransactionResult<O>
48     {
49         let mut conn = Connection {};
50         let mut transaction = TestTransaction { conn: &mut conn };
51         f(&mut transaction).await
52     }
53 }
54
55 fn main() {}