std::wcout.imbue(std::locale("japanese"));
std::wcout << L"森鷗外" << std::endl;

wchar_t 文字列1[] = L"森鷗外";
std::wcout << 文字列1 << std::endl;

LPWSTR 文字列2 = L"森鷗外";
std::wcout << 文字列2 << std::endl;

何れのwcoutも正常に表示されません。
MessageBoxなら

MessageBoxW(0, 文字列1, L"", MB_OK);
MessageBoxW(0, 文字列2, L"", MB_OK);

できちんと表示されますが、何が原因なのでしょうか。