// Example 13-27: Reading and writing monetary values.
#include <iostream>
#include <locale>
#include <ostream>

int main()
{
  std::ios_base::iostate err = std::ios_base::goodbit;
  long double value;
  std::locale::global(std::locale(""));
  std::cin.imbue(std::locale());
  std::cout.imbue(std::locale());
  std::cout << std::showbase;
  std::cout << "What is your hourly wage? ";
  std::use_facet<std::money_get<char> >(std::locale()).get(
    std::cin, std::istreambuf_iterator<char>(),
    false, std::cin, err, value);
  if (err)
    std::cerr << "Invalid input\n";
  else {
    std::cout << value << '\n';
    std::cout << "You make ";
    std::use_facet<std::money_put<char> >(std::locale()).put(
      std::cout, false, std::cout, std::cout.fill(),
      value * 40);
    std::cout << " in a 40-hour work week.\n";
  }
}
