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.
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