If you are going to deal with real international issues you are going to need more than `std::wstring'.At least it allows you to work internationally natively without extra libraries.
At the very least, the standard interface is insufficient for iterating over storage boundaries, code points, and character boundaries. Literally, you simply can't do those three things with the standard interface unless they happen to be the same thing.
Then there are issues with locales. The standard doesn't even require anything other than the "C Locale". Even if it did, the locale mechanism of C++ is insufficient for expressing some artifacts of several languages.
As a consequence of this last part, consuming input in anything complex, like some currency, using only the standard C++ libraries becomes impossible even if you could enumerate and activate the relevant locale because the internal parsing is broken by definition.
This is also true for `std::wstring', and `std::wstring' adds some confusion of its own.Since std::string works with char, it means you cannot iterate a utf-8 string since it will always move one byte at a time.
Under Windows, `std::wstring' will likely be built from 16 bit units representing an incomplete UTF16 code set.
Under GNU/Linux, `std::wstring' will likely be built from 32 bit units representing an incomplete UTF32 code set.
Under other systems `std::wstring' may be built from 8 bit units representing something that isn't even a part of the Unicode standard.
In other words, you may not be able to count on `std::wstring' iterating on any given boundary, and even if you could you can't count on it iterating over a given code point correctly.
To get reasonably portable source (It is not acceptable for the programmer to do all the work of multiple library implementations.) you would have to use a third-party implementation of `std::wstring' in the first place.I do believe that wstrings are a better alternative.
Seriously, take the time to compare the usability of `std::string', `std::wstring', and the locales mechanism under MSVC, GCC on GNU/Linux, GCC (MinGW), and any fourth compiler of your choice.
The situation for internationalization within the standard C++ libraries is abysmal. You are far better off using a library that knows more about Unicode, quirky locales, and has a decent repertoire of locales available across all targeted systems.
Oh, and god help you if you are doing anything fancy with the text. If you are going to try and highlight misspelled words... actually don't. You are better off shipping a dictionary with your software than to try and get a combination like Hungarian quoting English quoting French with a misspelled word highlighting correctly.
Soma