UTF-8 енкодован текст можеш да држиш у обичном std::string објекту. Наравно, мораш да будеш свестан да један char значи 1 бајт, а не једно слово, али то је ионако већ случај и у другим мултибајт енкодним шемама.
За манипулисање UTF-8 текстом из С++а, погледај ову малу и једноставну библиотеку (библиотека је доста популарна, мада аутору не бих дао ни овце да чува
)
http://utfcpp.sourceforge.net/
Што се тиче механизама стандардне С++ библиотеке: стримови, локали, итд, то ваљда Свевишњи разуме, а мени смртнику не пада на памет да се тиме бакћем