| 589 | |
| 590 | template <typename T> |
| 591 | void TestApplyNoRvalueCopyImpl() { |
| 592 | size_t numCopies = 0; |
| 593 | TCopyCounter copyCounter(&numCopies); |
| 594 | |
| 595 | auto promise = MakePromise<T>(); |
| 596 | |
| 597 | const auto future = promise.GetFuture().Apply( |
| 598 | [copyCounter = std::move(copyCounter)] (const auto&) {} |
| 599 | ); |
| 600 | |
| 601 | if constexpr (std::is_same_v<T, void>) { |
| 602 | promise.SetValue(); |
| 603 | } else { |
| 604 | promise.SetValue(T()); |
| 605 | } |
| 606 | |
| 607 | future.GetValueSync(); |
| 608 | |
| 609 | UNIT_ASSERT_VALUES_EQUAL(numCopies, 0); |
| 610 | } |
| 611 | |
| 612 | Y_UNIT_TEST(ApplyNoRvalueCopy) { |
| 613 | TestApplyNoRvalueCopyImpl<void>(); |