/* * Copyright (c) 2026, Gregory Bertilson * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include namespace { struct CopyOnly { int& instance_count; CopyOnly(int& count) : instance_count(count) { instance_count++; } CopyOnly(CopyOnly const& other) : instance_count(other.instance_count) { instance_count++; } ~CopyOnly() { instance_count--; } }; } TEST_CASE(move_construction_destroys_old_inline_wrapper) { int instance_count = 0; { Function source = [captured = CopyOnly(instance_count)]() { (void)captured; }; EXPECT_EQ(instance_count, 1); Function destination = move(source); EXPECT_EQ(instance_count, 1); source = nullptr; EXPECT_EQ(instance_count, 1); } EXPECT_EQ(instance_count, 0); } TEST_CASE(move_assignment_destroys_old_inline_wrapper) { int instance_count = 0; { Function source = [captured = CopyOnly(instance_count)]() { (void)captured; }; EXPECT_EQ(instance_count, 1); Function destination; destination = move(source); EXPECT_EQ(instance_count, 1); source = nullptr; EXPECT_EQ(instance_count, 1); } EXPECT_EQ(instance_count, 0); }