#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=