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.