Listing 5

// input_redirection_demo.hpp
#include <fstream>
#include <streambuf>
#include "to_upper.hpp"

namespace input_redirection_demo
{
  using namespace std;
  int main() {
    ifstream in("input.txt");
    streambuf* old_cin = cin.rdbuf(in.rdbuf());
    int ret = 1;
    try {
      ret = to_upper::main();
      cin.rdbuf(old_cin);
    }
    catch (...) {
      cin.rdbuf(old_cin);
      return ret;
    }
    return ret;
  }
}