#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