#include <iostream>
#include <iomanip>
#include <sstream>
#include <locale>
 
using namespace std;
 
class Foo : public std::moneypunct<char> {
protected:
	char_type do_decimal_point() const {
		cout << "Hit Foo::do_decimal_point";
		return ',';
	}
	char_type do_thousands_sep() const {
		cout << "Hit Foo::do_thousands_sep";
		return '.';
	}
};
 
int main()
{
	cout.imbue(locale(locale("C"), new Foo));
 
	const moneypunct<char>* temp = &use_facet<std::moneypunct<char>>(cout.getloc());
 
	cout << temp->decimal_point() << endl << temp->thousands_sep() << endl;
 
	istringstream USCurency("1,234.56 -1,234.56 1.234,56 -1.234,56");
	USCurency.imbue(cout.getloc());
 
	long double value;
 
	USCurency >> get_money(value, true);	
 
	return 0;
}
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxsb2NhbGU+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgRm9vIDogcHVibGljIHN0ZDo6bW9uZXlwdW5jdDxjaGFyPiB7CnByb3RlY3RlZDoKCWNoYXJfdHlwZSBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QgewoJCWNvdXQgPDwgIkhpdCBGb286OmRvX2RlY2ltYWxfcG9pbnQiOwoJCXJldHVybiAnLCc7Cgl9CgljaGFyX3R5cGUgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0IHsKCQljb3V0IDw8ICJIaXQgRm9vOjpkb190aG91c2FuZHNfc2VwIjsKCQlyZXR1cm4gJy4nOwoJfQp9OwoKaW50IG1haW4oKQp7Cgljb3V0LmltYnVlKGxvY2FsZShsb2NhbGUoIkMiKSwgbmV3IEZvbykpOwoJCgljb25zdCBtb25leXB1bmN0PGNoYXI+KiB0ZW1wID0gJnVzZV9mYWNldDxzdGQ6Om1vbmV5cHVuY3Q8Y2hhcj4+KGNvdXQuZ2V0bG9jKCkpOwoJCgljb3V0IDw8IHRlbXAtPmRlY2ltYWxfcG9pbnQoKSA8PCBlbmRsIDw8IHRlbXAtPnRob3VzYW5kc19zZXAoKSA8PCBlbmRsOwoJCglpc3RyaW5nc3RyZWFtIFVTQ3VyZW5jeSgiMSwyMzQuNTYgLTEsMjM0LjU2IDEuMjM0LDU2IC0xLjIzNCw1NiIpOwoJVVNDdXJlbmN5LmltYnVlKGNvdXQuZ2V0bG9jKCkpOwoJCglsb25nIGRvdWJsZSB2YWx1ZTsKCglVU0N1cmVuY3kgPj4gZ2V0X21vbmV5KHZhbHVlLCB0cnVlKTsJCgoJcmV0dXJuIDA7Cn0=