I've just released libu8ident, which implements the TR39 checks (and some TR31 profiles) for unicode identifiers. UTF-8 only. wchar support would be trivial, but I don't think anybody (but MSVC) would need that.

That's the only such tool which is not in Rust or Java. I've only implemented it previously in my perl5 fork in 2016.

This accompanies my recent WG21 and WG14 papers P2528R0 and n2916
https://rurban.github.io/libu8ident/doc/P2528R0.html
https://rurban.github.io/libu8ident/doc/n2916.html

I've also came up with 2 TR31 bug reports, sent to unicode via their contact form.
They might fix their tables for version 15 then. See doc/tr31-bugs/md
--
Reini Urban