ファイルオープン時のみ、ストリーム単位でロケールを変更したいです。
下のように(A)の行をコメントアウトした状態だと「failed」が出力され、
ファイルオープンに失敗します。
((A)を有効にして、(B), (C), (D)をコメントアウトした場合は「succeeded」が表示されます)
どこを修正したらいいか、ご指摘をお願いします。
環境はWinXP Pro で Visual Studio 2008 Proです。プロジェクトはWin32コンソールアプリケーションで、
ウィザードの設定はデフォルトです。
#include "stdafx.h"
#include <iostream>
#include <fstream>

int _tmain(int argc, _TCHAR* argv[])
{
  std::ifstream ifs;
// std::locale::global(std::locale("japanese"));  // (A)
  std::locale loc = ifs.getloc();           // (B)
  ifs.imbue(std::locale("japanese"));       // (C)
  ifs.open("あいうえお.txt");
  ifs.imbue(loc);                   // (D)

  if (!ifs.is_open()) {
    std::cout << "failed" << std::endl;
  } else {
    std::cout << "succeeded " << std::endl;
  }
  return 0;
}