https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70530
Askar Safin <safinaskar at mail dot ru> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Resolution|INVALID |--- --- Comment #5 from Askar Safin <safinaskar at mail dot ru> --- I will try to repeat. 1. DR 2468 says that after "a = std::move (a)" state of a is unspecified 2. libstdc++'s current std::swap is just 3 moves without any checks 3. From 1 and 2 current libstdc++'s std::swap (a, a) leave a in unspecified state 4. But (as it seems for me) the standard nowhere says that std::swap (a, a) is unspecified. So, it should be specified 5. Moreover, you just said "self-swap is not undefined", i. e. "self-swap is defined" (I assume there is no typo here). This acknowledges 4. So, we see clear contradiction between 3 and 4. So, something should be fixed. Either libstdc++, either c++ standard. One solution is to fix libstdc++'s std::swap. Other is to write to standard that std::swap (a, a) is unspecified. There may be other solutions. I reopen this bug