#include <iostream>
#include <locale>
template <typename T>
struct comma_separator : std::numpunct<T>
{
typename std::numpunct<T>::char_type do_decimal_point() const
{
return ',';
}
};
template <typename T>
std::basic_ostream<T>& comma_sep(std::basic_ostream<T>& os)
{
os.imbue(std::locale(std::locale(""), new comma_separator<T>));
return os;
}
int main()
{
std::cout << comma_sep << 3.14; // 3,14
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bG9jYWxlPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBjb21tYV9zZXBhcmF0b3IgOiBzdGQ6Om51bXB1bmN0PFQ+CnsKICAgIHR5cGVuYW1lIHN0ZDo6bnVtcHVuY3Q8VD46OmNoYXJfdHlwZSBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gJywnOwogICAgfQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0ZDo6YmFzaWNfb3N0cmVhbTxUPiYgY29tbWFfc2VwKHN0ZDo6YmFzaWNfb3N0cmVhbTxUPiYgb3MpCnsKICAgIG9zLmltYnVlKHN0ZDo6bG9jYWxlKHN0ZDo6bG9jYWxlKCIiKSwgbmV3IGNvbW1hX3NlcGFyYXRvcjxUPikpOwogICAgcmV0dXJuIG9zOwp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6Y291dCA8PCBjb21tYV9zZXAgPDwgMy4xNDsgLy8gMywxNAp9