std::coutとstd::wcoutを混在させると正しく出力されない
#include <iostream>
#include <locale>
int main()
{
std::setlocale(LC_CTYPE, "");
std::wcout << L"あいうえお" << std::endl;
}
とすると、あいうえお
と出力されます。
#include <iostream>
#include <locale>
int main()
{
std::setlocale(LC_CTYPE, "");
std::cout << "あいうえお" << std::endl;
}
とすると、やはりあいうえお
と出力されます。
ところが、
#include <iostream>
#include <locale>
int main()
{
std::setlocale(LC_CTYPE, "");
std::cout << "あいうえお" << std::endl;
std::wcout << L"あいうえお" << std::endl;
}
とすると
あいうえお
あいうえお
を期待していましたが
あいうえお
BDFHJ
と出力されます。
std::wcout << L"あいうえお" << std::endl;
が正しく表示さなく、BDFHJ
と出力されます。
そもそもstd::coutとstd::wcoutを混在させることはまれなので、さほど大きな問題とはかんじていないのですが、不思議な結果に驚いています。
質問
これは仕様通りの結果なのでしょうか?
環境は、
Ubuntu14.04(x86_64)
LANG="ja_JP.UTF-8"
g++ version 4.8.5
clang++ version 3.4
で結果は同じでした。