Just leaving this here.
I’ve filed a bug report about having to do non-generic implementations, which makes this a lot uglier than it needs to be. Jordan Rose wrote in response to my bug,
I’m pretty sure this is an overload ordering question, and I’m not convinced the compiler is wrong. If something is a more specific overload and marked unavailable, silently dropping back to the less-specific overload might be counterintuitive. (It also means the behavior of existing code could change silently if something is marked unavailable between releases.)
In any case, if you have any fixes or tweaks, as always please let me know and I’ll update.
It looks like the ++ operators were not just removed from the language (a move I support), but they were actively blocked on the formerly implementing types. Is that accurate?
In order to customize the error messages emitted when you try to use ++ or –, they have to leave stub implementations in place with attributes containing the messages.