1. std::move Marks for Potential Move, Does Not Guarantee Ownership Transfer
Users emphasize std::move casts to rvalue but leaves actual move to callee.
"shmerl: I always understood move as moving ownership" vs. "vlovich123: Std move doesnβt move ownership. It simply casts into something that could have its ownership taken."
"masklinn: it's intended for transferring ownership, but what it actually does is mark the value as transferrable."
2. Moves Are Not Always Statically Knowable
Debate on runtime decisions in callees preventing static analysis.
"tsimionescu: It is absolutely knowable statically if ownership will be taken."
"masklinn: The function I posted only moves its parameter half the time, at random." (counterexample with random branch).
"knorker: the act of calling std::move... in no way invokes a move constructor."
3. Pitfalls: noexcept, Const, Moved-From State, NRVO
STL requires noexcept moves for efficiency; other gotchas abound.
"HarHarVeryFunny: containers just copy everything instead [without noexcept]."
"drysine: the language doesn't dictate what post-condition your class has for move-ctor... it could be 'don't touch this object after move' (and it's UB)."
"Fiveplus: return std::move(local_var)... is technically a pessimization beyond just breaking NRVO."
4. C++ Complexity, Poor Naming, Better in Rust
Critiques of footguns, design; suggestions like std::offer; Rust praised.
"drob518: so many foot guns and so much rampant complexity."
"masklinn: std::move looks and feels like a function, but it doesn't do what it says... Pin is a much better candidate [in Rust]."
"vouwfietsman: std::offer" (upvoted suggestion); "oezi: std::move is a cast."