You declare a move constructor as `Foo(Foo&&) = default;` but leave the copy constructor and copy assignment alone. Which special members does the compiler implicitly provide for Foo afterward?
struct Foo {
Foo(Foo&&) = default;
// nothing else user-declared
};