#include #include struct Counter { int value; Counter(int v) : value(v) { std::cout << "constructed " << value << "\n"; } ~Counter() { std::cout << "destroyed " << value << "\n"; } // Move constructor promised not to throw Counter(Counter&& other) noexcept : value(other.value) { std::cout << "move used\n"; // marker for EXPECT other.value = 0; } // Delete copy to emphasize move usage Counter(const Counter&) = delete; Counter& operator=(const Counter&) = delete; Counter& operator=(Counter&& other) noexcept { value = other.value; other.value = 0; return *this; } }; int main(){ Counter a{42}; Counter b = std::move(a); // triggers noexcept move std::cout << "final b=" << b.value << "\n"; return 0; }