Files
2025-10-25 03:02:53 +03:00

116 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[ext.manip]
# 31 Input/output library [[input.output]](./#input.output)
## 31.7 Formatting and manipulators [[iostream.format]](iostream.format#ext.manip)
### 31.7.8 Extended manipulators [ext.manip]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L7456)
The header [<iomanip>](iomanip.syn#header:%3ciomanip%3e "31.7.3Header <iomanip> synopsis[iomanip.syn]") defines several functions that support extractors and inserters that allow for the
parsing and formatting of sequences and values for money and time[.](#1.sentence-1)
[🔗](#lib:get_money)
`template<class moneyT> unspecified get_money(moneyT& mon, bool intl = false);
`
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L7466)
*Mandates*: The type moneyT is either long double or
a specialization of the basic_string template ([[strings]](strings "27Strings library"))[.](#2.sentence-1)
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L7471)
*Effects*: The expression in >> get_money(mon, intl) described below
behaves as a [formatted input function](istream.formatted.reqmts "31.7.5.3.1Common requirements[istream.formatted.reqmts]")[.](#3.sentence-1)
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L7476)
*Returns*: An object of unspecified type such that ifin is an object of type basic_istream<charT, traits> then the expression in >> get_money(mon, intl) behaves as if it calledf(in, mon, intl), where the function f is defined as:template<class charT, class traits, class moneyT>void f(basic_ios<charT, traits>& str, moneyT& mon, bool intl) {using Iter = istreambuf_iterator<charT, traits>; using MoneyGet = money_get<charT, Iter>;
ios_base::iostate err = ios_base::goodbit; const MoneyGet& mg = use_facet<MoneyGet>(str.getloc());
mg.get(Iter(str.rdbuf()), Iter(), intl, str, err, mon); if (ios_base::goodbit != err) str.setstate(err);}
The expression in >> get_money(mon, intl) has typebasic_istream<charT, traits>& and value in[.](#4.sentence-2)
[🔗](#lib:put_money)
`template<class moneyT> unspecified put_money(const moneyT& mon, bool intl = false);
`
[5](#5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L7508)
*Mandates*: The type moneyT is either long double or
a specialization of the basic_string template ([[strings]](strings "27Strings library"))[.](#5.sentence-1)
[6](#6)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L7513)
*Returns*: An object of unspecified type such that ifout is an object of type basic_ostream<charT, traits> then the expression out << put_money(mon, intl) behaves as a[formatted output function](ostream.formatted.reqmts "31.7.6.3.1Common requirements[ostream.formatted.reqmts]") that callsf(out, mon, intl), where the function f is defined as:template<class charT, class traits, class moneyT>void f(basic_ios<charT, traits>& str, const moneyT& mon, bool intl) {using Iter = ostreambuf_iterator<charT, traits>; using MoneyPut = money_put<charT, Iter>; const MoneyPut& mp = use_facet<MoneyPut>(str.getloc()); const Iter end = mp.put(Iter(str.rdbuf()), intl, str, str.fill(), mon); if (end.failed()) str.setstate(ios_base::badbit);}
The expression out << put_money(mon, intl) has typebasic_ostream<charT, traits>& and value out[.](#6.sentence-2)
[🔗](#lib:get_time)
`template<class charT> unspecified get_time(tm* tmb, const charT* fmt);
`
[7](#7)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L7544)
*Preconditions*: The argument tmb is a valid pointer to an object of type tm,
and [fmt, fmt + char_traits<charT>::length(fmt)) is a valid range[.](#7.sentence-1)
[8](#8)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L7549)
*Returns*: An object of unspecified type such that if in is an object of typebasic_istream<charT, traits> then the expression in >> get_time(tmb,
fmt) behaves as if it called f(in, tmb, fmt), where the function f is
defined as:template<class charT, class traits>void f(basic_ios<charT, traits>& str, tm* tmb, const charT* fmt) {using Iter = istreambuf_iterator<charT, traits>; using TimeGet = time_get<charT, Iter>;
ios_base::iostate err = ios_base::goodbit; const TimeGet& tg = use_facet<TimeGet>(str.getloc());
tg.get(Iter(str.rdbuf()), Iter(), str, err, tmb,
fmt, fmt + traits::length(fmt)); if (err != ios_base::goodbit) str.setstate(err);}
The expression in >> get_time(tmb, fmt) has typebasic_istream<charT, traits>& and value in[.](#8.sentence-2)
[🔗](#lib:put_time)
`template<class charT> unspecified put_time(const tm* tmb, const charT* fmt);
`
[9](#9)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L7582)
*Preconditions*: The argument tmb is a valid pointer to an object of type tm,
and [fmt, fmt + char_traits<charT>::length(fmt)) is a valid range[.](#9.sentence-1)
[10](#10)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L7587)
*Returns*: An object of unspecified type such that if out is an object of
type basic_ostream<charT, traits> then the expressionout << put_time(tmb, fmt) behaves as if it called f(out, tmb, fmt),
where the function f is defined as:template<class charT, class traits>void f(basic_ios<charT, traits>& str, const tm* tmb, const charT* fmt) {using Iter = ostreambuf_iterator<charT, traits>; using TimePut = time_put<charT, Iter>; const TimePut& tp = use_facet<TimePut>(str.getloc()); const Iter end = tp.put(Iter(str.rdbuf()), str, str.fill(), tmb,
fmt, fmt + traits::length(fmt)); if (end.failed()) str.setstate(ios_base::badbit);}
The expression out << put_time(tmb, fmt) has typebasic_ostream<charT, traits>& and value out[.](#10.sentence-2)