You'll need to be a bit careful of this: In many places we assume that CStdStringW is a complete representation (i.e. each character takes up a single 16bit entry).  This is not true of utf16, or of wchar_t for that matter.  utf32 is the only one where this actually works.

In other cases we make this assumption in addition to making the assumption that it is a 16bit character (rendering to the UI for example).

Thus, when fixing this correctly, you'll need to identify those usages that:

1. Are due to the single-glyph-per-character where no assumption of 16bit-ness is required.  Use u32string here.
2. Are due to the single-glyph-per-character AND require 16bit-ness.  In this case things are trickier, but the first step would be clearly identifying them as such by using u16string.
3. Are taking something from or to a win32 wide-string for use in filesystem operations and the like.  Here you'll want to make sure you're going to or from a wchar_t string I think?
4. Are actually transferring from utf16.  I doubt we have many (any?) of these at all.