Jeśli chodzi Ci o wyświetlanie literałów tekstowych/znakowych, to np. tak możesz zrobić:
using conv = std::wstring_convert<std::codecvt_utf8<char16_t>, char16_t>;
char16_t b = u'ę';
const char16_t *s = u"śćżźół\n";
std::cout << conv().to_bytes(b) << '\n';
std::cout << conv().to_bytes(s) << '\n';
To zadziała pod warunkiem, że uda Ci się zmusić cout do wyświetlania tekstu w kodowaniu utf-8 (w linuxie to nie problem).
[dodane]
Wersja, która powinna śmignąć w windowsie:
const char16_t* s = u"śćżźół";
setlocale(LC_CTYPE, ".852"); // w MinGW tak musi być
//std::wcout.imbue(std::locale(".852")); // a tak w C++
using conv1 = std::wstring_convert<std::codecvt_utf8<char16_t>, char16_t>;
using conv2 = std::wstring_convert<std::codecvt_utf8<wchar_t, 0x10ffff, std::little_endian>, wchar_t>;
std::wstring ws = conv2().from_bytes(conv1().to_bytes(s));
std::wcout << ws << L'\n';