unneeded complexity is bad. But making simplicity out of a complex problem takes more time and talent than most people have (if it's possible at all for that problem space to begin with).
C++ and Rust are designed around dealing with complex problems. Specifically in this case where memory management is of utmost importance. Understand the problem you're trying to solve before dismissing a tool as "too complex". If you don't have that problem, wonderful. More time to focus on the problems you actually need to solve instead of complaining about other problems.
They expanded the Rule of 3 to the Rule of 5 for a reason. The operations work together. Move semantics simply work as an optimization when you know the data you're taking in won't be needed anymore and you can more or less "snatch" the data (to put it overly broadly). If you can't do that, you take a slow path and just copy properties one by one.
Garbage collection? Well, besides these languages not having that, managed languages are making the exact same decisions under the hood when optimizing. if it knows a reference is being assigned but then goes out of scope, it can do similar move semantics to save on a copy.
But by all means, let's not debate programming language complexity and call people vacuous trolls instead.
[1] "explanations fail because they don't focus on" -> "best understood as". I mean, come on. I'm not reading much bile here. You added that.