I haven't checked your other claims but this stands out:
> The exception that are part of STL don’t return Unicode at all, they are in English.
Do you mean they return the text as bytes using some (likely ASCII) character encoding and all the text characters are in ASCII range?
There Ain't No Such Thing As Plain Text. (2003) http://www.joelonsoftware.com/articles/Unicode.html
If you rely on std::exception::what() while building a localizable software, you’ll end with inconsistent GUI language. Because some exceptions (that are part of STL) will return English messages, other exceptions (that aren’t part of STL) will return non-English messages.
This means if you’re developing anything localizable, you can’t rely on std::exception::what().
Then why care about it’s prototype?
Why care about it's prototype? You may want to embed into what() unicode strings that describe the error and came from elsewhere. E.g. a path, a URL, an XML element id, etc. from the context the exception originated. It may be shown to the user or written to the log. Localization is irrelevant here.
Wrong: up to 4 bytes UTF16, and up to 6 bytes UTF8.
> Cyrillic, Hebrew and several other popular Unicode blocks are 2 bytes both in UTF-16 and UTF-8.
Cyrillic, Hebrew and several other languages still have spaces and punctuation, that take a single byte in UTF8. Now it’s 2016, RAM and storage are cheap and declining, but CPU branch misprediction cost is same 20 cycles and not going to decline.
> plain Windows edit control (until Vista)
Windows XP is 14 years old, and now in 2016 it’s market share is less then 3%. Who cares what was before Vista?
> In C++, there is no way to return Unicode from std::exception::what() other than using UTF-8.
The exception that are part of STL don’t return Unicode at all, they are in English.
If you throw your custom exceptions, return non-English messages in exception::what() in utf-8, catch std::exception and call what() — you’ll get English error messages for STL-thrown exceptions, and non-English error messages for your custom exceptions.
I’m not sure mixing GUI languages in a single app is always a right thing.
> First, the application must be compiled as Unicode-aware
The oldest visual studio I have installed is 2008 (because I sometimes develop for WinCE). I’ve just created a new C++ console application project, and by default it already Unicode-aware.
So, for anyone using Microsoft IDE, this requirement is not a problem.