cin と wcin の同時使用

boostの正規表現ライブラリで遊ぼうと思ってstd::wstringを初めていじってみてたら、次のような現象を発見

#include <iostream>
using namespace std;

int main(){
  string str;
  wstring wstr;
  cin >> str;
  wcin >> wstr;
  cout << str << endl;
  wcout << wstr << endl;
  return 0;
}

みたいなコードを動かしてみると次みたいになる。

%./a.out
hoge
hoge

%

cin >> strのみが実行されwcin >> wstrが実行されないのでwstrが空状態になっているようだ。
もちろんcinやwcinのみを連続して使ってもこうはならなくて、cinとwcinを同時に使用した場合にこうなるみたい。
cinとstdinならまだしもwcinまでこうなのか…使いにくい。まぁ当然といえば当然なんだけど。