I think the best way to do this is to use wchar and wstring for characters - they are intended for local independent string operations and are defined as UTF-16 on Windows and as UTF-32 on Linux.
Note that you need to use the appropriate functions, for example wprintfinstead printf... If you use iostream, I think this should work ready using wstrings.
EDIT: Note that it wchar_tdoes not require unicode (in practice this often happens). If wchar_t(and therefore wstring) is unicode, then the C99 standard (and therefore most likely the C ++ standard) indicates what __STDC_ISO_10646__needs to be defined.
, __STDC_ISO_10646__ , wchar_t unicode - (UTF-16 UTF-32), sizeof (wchar_t).