I think this still is a really simple solution. I'll see if this gets more traction.
You need to provide more motivation.
"What if I have an empty struct type that is trivially copyable and assignable but for some bizarre unexplained reason I want it to be non-swappable" is simply no motivation at all.
With all due respect Arthur, have you seen my clarification that swap was an example and that the goal is to be able to prevent whatever function in a different namespace/scope? For example, foo::bar()
That's the motivation, rather than preventing swapping (where I think "bizarre" is an unneeded word in terms of netiquette).