1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
12 // template <class charT, class moneyT> T8 put_money(const moneyT& mon, bool intl = false);
14 // REQUIRES: locale.en_US.UTF-8
20 #include "platform_support.h" // locale name macros
22 template <class CharT>
24 : public std::basic_streambuf<CharT>
26 typedef std::basic_streambuf<CharT> base;
27 std::basic_string<CharT> str_;
33 std::basic_string<CharT> str() const
34 {return std::basic_string<CharT>(base::pbase(), base::pptr());}
38 virtual typename base::int_type
39 overflow(typename base::int_type ch = base::traits_type::eof())
41 if (ch != base::traits_type::eof())
44 str_.push_back(static_cast<CharT>(ch));
45 str_.resize(str_.capacity());
46 base::setp(const_cast<CharT*>(str_.data()),
47 const_cast<CharT*>(str_.data() + str_.size()));
59 os.imbue(std::locale(LOCALE_en_US_UTF_8));
61 long double x = -123456789;
62 os << std::put_money(x, false);
63 assert(sb.str() == "-$1,234,567.89");
68 os.imbue(std::locale(LOCALE_en_US_UTF_8));
70 long double x = -123456789;
71 os << std::put_money(x, true);
72 assert(sb.str() == "-USD 1,234,567.89");
76 std::wostream os(&sb);
77 os.imbue(std::locale(LOCALE_en_US_UTF_8));
79 long double x = -123456789;
80 os << std::put_money(x, false);
81 assert(sb.str() == L"-$1,234,567.89");
85 std::wostream os(&sb);
86 os.imbue(std::locale(LOCALE_en_US_UTF_8));
88 long double x = -123456789;
89 os << std::put_money(x, true);
90 assert(sb.str() == L"-USD 1,234,567.89");