xref: /freebsd/contrib/llvm-project/libcxx/include/ostream (revision 0b57cec536236d46e3dba9bd041533462f33dbb7)
1*0b57cec5SDimitry Andric// -*- C++ -*-
2*0b57cec5SDimitry Andric//===-------------------------- ostream -----------------------------------===//
3*0b57cec5SDimitry Andric//
4*0b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*0b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
6*0b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7*0b57cec5SDimitry Andric//
8*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
9*0b57cec5SDimitry Andric
10*0b57cec5SDimitry Andric#ifndef _LIBCPP_OSTREAM
11*0b57cec5SDimitry Andric#define _LIBCPP_OSTREAM
12*0b57cec5SDimitry Andric
13*0b57cec5SDimitry Andric/*
14*0b57cec5SDimitry Andric    ostream synopsis
15*0b57cec5SDimitry Andric
16*0b57cec5SDimitry Andrictemplate <class charT, class traits = char_traits<charT> >
17*0b57cec5SDimitry Andricclass basic_ostream
18*0b57cec5SDimitry Andric    : virtual public basic_ios<charT,traits>
19*0b57cec5SDimitry Andric{
20*0b57cec5SDimitry Andricpublic:
21*0b57cec5SDimitry Andric    // types (inherited from basic_ios (27.5.4)):
22*0b57cec5SDimitry Andric    typedef charT                          char_type;
23*0b57cec5SDimitry Andric    typedef traits                         traits_type;
24*0b57cec5SDimitry Andric    typedef typename traits_type::int_type int_type;
25*0b57cec5SDimitry Andric    typedef typename traits_type::pos_type pos_type;
26*0b57cec5SDimitry Andric    typedef typename traits_type::off_type off_type;
27*0b57cec5SDimitry Andric
28*0b57cec5SDimitry Andric    // 27.7.2.2 Constructor/destructor:
29*0b57cec5SDimitry Andric    explicit basic_ostream(basic_streambuf<char_type,traits>* sb);
30*0b57cec5SDimitry Andric    basic_ostream(basic_ostream&& rhs);
31*0b57cec5SDimitry Andric    virtual ~basic_ostream();
32*0b57cec5SDimitry Andric
33*0b57cec5SDimitry Andric    // 27.7.2.3 Assign/swap
34*0b57cec5SDimitry Andric    basic_ostream& operator=(const basic_ostream& rhs) = delete; // C++14
35*0b57cec5SDimitry Andric    basic_ostream& operator=(basic_ostream&& rhs);
36*0b57cec5SDimitry Andric    void swap(basic_ostream& rhs);
37*0b57cec5SDimitry Andric
38*0b57cec5SDimitry Andric    // 27.7.2.4 Prefix/suffix:
39*0b57cec5SDimitry Andric    class sentry;
40*0b57cec5SDimitry Andric
41*0b57cec5SDimitry Andric    // 27.7.2.6 Formatted output:
42*0b57cec5SDimitry Andric    basic_ostream& operator<<(basic_ostream& (*pf)(basic_ostream&));
43*0b57cec5SDimitry Andric    basic_ostream& operator<<(basic_ios<charT, traits>& (*pf)(basic_ios<charT,traits>&));
44*0b57cec5SDimitry Andric    basic_ostream& operator<<(ios_base& (*pf)(ios_base&));
45*0b57cec5SDimitry Andric    basic_ostream& operator<<(bool n);
46*0b57cec5SDimitry Andric    basic_ostream& operator<<(short n);
47*0b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned short n);
48*0b57cec5SDimitry Andric    basic_ostream& operator<<(int n);
49*0b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned int n);
50*0b57cec5SDimitry Andric    basic_ostream& operator<<(long n);
51*0b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned long n);
52*0b57cec5SDimitry Andric    basic_ostream& operator<<(long long n);
53*0b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned long long n);
54*0b57cec5SDimitry Andric    basic_ostream& operator<<(float f);
55*0b57cec5SDimitry Andric    basic_ostream& operator<<(double f);
56*0b57cec5SDimitry Andric    basic_ostream& operator<<(long double f);
57*0b57cec5SDimitry Andric    basic_ostream& operator<<(const void* p);
58*0b57cec5SDimitry Andric    basic_ostream& operator<<(basic_streambuf<char_type,traits>* sb);
59*0b57cec5SDimitry Andric    basic_ostream& operator<<(nullptr_t);
60*0b57cec5SDimitry Andric
61*0b57cec5SDimitry Andric    // 27.7.2.7 Unformatted output:
62*0b57cec5SDimitry Andric    basic_ostream& put(char_type c);
63*0b57cec5SDimitry Andric    basic_ostream& write(const char_type* s, streamsize n);
64*0b57cec5SDimitry Andric    basic_ostream& flush();
65*0b57cec5SDimitry Andric
66*0b57cec5SDimitry Andric    // 27.7.2.5 seeks:
67*0b57cec5SDimitry Andric    pos_type tellp();
68*0b57cec5SDimitry Andric    basic_ostream& seekp(pos_type);
69*0b57cec5SDimitry Andric    basic_ostream& seekp(off_type, ios_base::seekdir);
70*0b57cec5SDimitry Andricprotected:
71*0b57cec5SDimitry Andric    basic_ostream(const basic_ostream& rhs) = delete;
72*0b57cec5SDimitry Andric    basic_ostream(basic_ostream&& rhs);
73*0b57cec5SDimitry Andric    // 27.7.3.3 Assign/swap
74*0b57cec5SDimitry Andric    basic_ostream& operator=(basic_ostream& rhs) = delete;
75*0b57cec5SDimitry Andric    basic_ostream& operator=(const basic_ostream&& rhs);
76*0b57cec5SDimitry Andric    void swap(basic_ostream& rhs);
77*0b57cec5SDimitry Andric};
78*0b57cec5SDimitry Andric
79*0b57cec5SDimitry Andric// 27.7.2.6.4 character inserters
80*0b57cec5SDimitry Andric
81*0b57cec5SDimitry Andrictemplate<class charT, class traits>
82*0b57cec5SDimitry Andric  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, charT);
83*0b57cec5SDimitry Andric
84*0b57cec5SDimitry Andrictemplate<class charT, class traits>
85*0b57cec5SDimitry Andric  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, char);
86*0b57cec5SDimitry Andric
87*0b57cec5SDimitry Andrictemplate<class traits>
88*0b57cec5SDimitry Andric  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, char);
89*0b57cec5SDimitry Andric
90*0b57cec5SDimitry Andric// signed and unsigned
91*0b57cec5SDimitry Andric
92*0b57cec5SDimitry Andrictemplate<class traits>
93*0b57cec5SDimitry Andric  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, signed char);
94*0b57cec5SDimitry Andric
95*0b57cec5SDimitry Andrictemplate<class traits>
96*0b57cec5SDimitry Andric  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, unsigned char);
97*0b57cec5SDimitry Andric
98*0b57cec5SDimitry Andric// NTBS
99*0b57cec5SDimitry Andrictemplate<class charT, class traits>
100*0b57cec5SDimitry Andric  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const charT*);
101*0b57cec5SDimitry Andric
102*0b57cec5SDimitry Andrictemplate<class charT, class traits>
103*0b57cec5SDimitry Andric  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const char*);
104*0b57cec5SDimitry Andric
105*0b57cec5SDimitry Andrictemplate<class traits>
106*0b57cec5SDimitry Andric  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const char*);
107*0b57cec5SDimitry Andric
108*0b57cec5SDimitry Andric// signed and unsigned
109*0b57cec5SDimitry Andrictemplate<class traits>
110*0b57cec5SDimitry Andricbasic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const signed char*);
111*0b57cec5SDimitry Andric
112*0b57cec5SDimitry Andrictemplate<class traits>
113*0b57cec5SDimitry Andric  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const unsigned char*);
114*0b57cec5SDimitry Andric
115*0b57cec5SDimitry Andric// swap:
116*0b57cec5SDimitry Andrictemplate <class charT, class traits>
117*0b57cec5SDimitry Andric  void swap(basic_ostream<charT, traits>& x, basic_ostream<charT, traits>& y);
118*0b57cec5SDimitry Andric
119*0b57cec5SDimitry Andrictemplate <class charT, class traits>
120*0b57cec5SDimitry Andric  basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
121*0b57cec5SDimitry Andric
122*0b57cec5SDimitry Andrictemplate <class charT, class traits>
123*0b57cec5SDimitry Andric  basic_ostream<charT,traits>& ends(basic_ostream<charT,traits>& os);
124*0b57cec5SDimitry Andric
125*0b57cec5SDimitry Andrictemplate <class charT, class traits>
126*0b57cec5SDimitry Andric  basic_ostream<charT,traits>& flush(basic_ostream<charT,traits>& os);
127*0b57cec5SDimitry Andric
128*0b57cec5SDimitry Andric// rvalue stream insertion
129*0b57cec5SDimitry Andrictemplate <class charT, class traits, class T>
130*0b57cec5SDimitry Andric  basic_ostream<charT, traits>&
131*0b57cec5SDimitry Andric  operator<<(basic_ostream<charT, traits>&& os, const T& x);
132*0b57cec5SDimitry Andric
133*0b57cec5SDimitry Andric}  // std
134*0b57cec5SDimitry Andric
135*0b57cec5SDimitry Andric*/
136*0b57cec5SDimitry Andric
137*0b57cec5SDimitry Andric#include <__config>
138*0b57cec5SDimitry Andric#include <ios>
139*0b57cec5SDimitry Andric#include <streambuf>
140*0b57cec5SDimitry Andric#include <locale>
141*0b57cec5SDimitry Andric#include <iterator>
142*0b57cec5SDimitry Andric#include <bitset>
143*0b57cec5SDimitry Andric#include <version>
144*0b57cec5SDimitry Andric
145*0b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
146*0b57cec5SDimitry Andric#pragma GCC system_header
147*0b57cec5SDimitry Andric#endif
148*0b57cec5SDimitry Andric
149*0b57cec5SDimitry Andric_LIBCPP_BEGIN_NAMESPACE_STD
150*0b57cec5SDimitry Andric
151*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
152*0b57cec5SDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_ostream
153*0b57cec5SDimitry Andric    : virtual public basic_ios<_CharT, _Traits>
154*0b57cec5SDimitry Andric{
155*0b57cec5SDimitry Andricpublic:
156*0b57cec5SDimitry Andric    // types (inherited from basic_ios (27.5.4)):
157*0b57cec5SDimitry Andric    typedef _CharT                         char_type;
158*0b57cec5SDimitry Andric    typedef _Traits                        traits_type;
159*0b57cec5SDimitry Andric    typedef typename traits_type::int_type int_type;
160*0b57cec5SDimitry Andric    typedef typename traits_type::pos_type pos_type;
161*0b57cec5SDimitry Andric    typedef typename traits_type::off_type off_type;
162*0b57cec5SDimitry Andric
163*0b57cec5SDimitry Andric    // 27.7.2.2 Constructor/destructor:
164*0b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
165*0b57cec5SDimitry Andric    explicit basic_ostream(basic_streambuf<char_type, traits_type>* __sb)
166*0b57cec5SDimitry Andric    { this->init(__sb); }
167*0b57cec5SDimitry Andric    virtual ~basic_ostream();
168*0b57cec5SDimitry Andricprotected:
169*0b57cec5SDimitry Andric#ifndef _LIBCPP_CXX03_LANG
170*0b57cec5SDimitry Andric    inline _LIBCPP_INLINE_VISIBILITY
171*0b57cec5SDimitry Andric    basic_ostream(basic_ostream&& __rhs);
172*0b57cec5SDimitry Andric
173*0b57cec5SDimitry Andric    // 27.7.2.3 Assign/swap
174*0b57cec5SDimitry Andric    inline _LIBCPP_INLINE_VISIBILITY
175*0b57cec5SDimitry Andric    basic_ostream& operator=(basic_ostream&& __rhs);
176*0b57cec5SDimitry Andric#endif
177*0b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
178*0b57cec5SDimitry Andric    void swap(basic_ostream& __rhs)
179*0b57cec5SDimitry Andric    { basic_ios<char_type, traits_type>::swap(__rhs); }
180*0b57cec5SDimitry Andric
181*0b57cec5SDimitry Andric#ifndef _LIBCPP_CXX03_LANG
182*0b57cec5SDimitry Andric    basic_ostream           (const basic_ostream& __rhs) = delete;
183*0b57cec5SDimitry Andric    basic_ostream& operator=(const basic_ostream& __rhs) = delete;
184*0b57cec5SDimitry Andric#else
185*0b57cec5SDimitry Andric    basic_ostream           (const basic_ostream& __rhs); // not defined
186*0b57cec5SDimitry Andric    basic_ostream& operator=(const basic_ostream& __rhs); // not defined
187*0b57cec5SDimitry Andric#endif
188*0b57cec5SDimitry Andricpublic:
189*0b57cec5SDimitry Andric
190*0b57cec5SDimitry Andric    // 27.7.2.4 Prefix/suffix:
191*0b57cec5SDimitry Andric    class _LIBCPP_TEMPLATE_VIS sentry;
192*0b57cec5SDimitry Andric
193*0b57cec5SDimitry Andric    // 27.7.2.6 Formatted output:
194*0b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
195*0b57cec5SDimitry Andric    basic_ostream& operator<<(basic_ostream& (*__pf)(basic_ostream&))
196*0b57cec5SDimitry Andric    { return __pf(*this); }
197*0b57cec5SDimitry Andric
198*0b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
199*0b57cec5SDimitry Andric    basic_ostream& operator<<(basic_ios<char_type, traits_type>&
200*0b57cec5SDimitry Andric                              (*__pf)(basic_ios<char_type,traits_type>&))
201*0b57cec5SDimitry Andric    { __pf(*this); return *this; }
202*0b57cec5SDimitry Andric
203*0b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
204*0b57cec5SDimitry Andric    basic_ostream& operator<<(ios_base& (*__pf)(ios_base&))
205*0b57cec5SDimitry Andric    { __pf(*this); return *this; }
206*0b57cec5SDimitry Andric
207*0b57cec5SDimitry Andric    basic_ostream& operator<<(bool __n);
208*0b57cec5SDimitry Andric    basic_ostream& operator<<(short __n);
209*0b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned short __n);
210*0b57cec5SDimitry Andric    basic_ostream& operator<<(int __n);
211*0b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned int __n);
212*0b57cec5SDimitry Andric    basic_ostream& operator<<(long __n);
213*0b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned long __n);
214*0b57cec5SDimitry Andric    basic_ostream& operator<<(long long __n);
215*0b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned long long __n);
216*0b57cec5SDimitry Andric    basic_ostream& operator<<(float __f);
217*0b57cec5SDimitry Andric    basic_ostream& operator<<(double __f);
218*0b57cec5SDimitry Andric    basic_ostream& operator<<(long double __f);
219*0b57cec5SDimitry Andric    basic_ostream& operator<<(const void* __p);
220*0b57cec5SDimitry Andric    basic_ostream& operator<<(basic_streambuf<char_type, traits_type>* __sb);
221*0b57cec5SDimitry Andric
222*0b57cec5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
223*0b57cec5SDimitry Andric    basic_ostream& operator<<(nullptr_t)
224*0b57cec5SDimitry Andric    { return *this << "nullptr"; }
225*0b57cec5SDimitry Andric
226*0b57cec5SDimitry Andric    // 27.7.2.7 Unformatted output:
227*0b57cec5SDimitry Andric    basic_ostream& put(char_type __c);
228*0b57cec5SDimitry Andric    basic_ostream& write(const char_type* __s, streamsize __n);
229*0b57cec5SDimitry Andric    basic_ostream& flush();
230*0b57cec5SDimitry Andric
231*0b57cec5SDimitry Andric    // 27.7.2.5 seeks:
232*0b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
233*0b57cec5SDimitry Andric    pos_type tellp();
234*0b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
235*0b57cec5SDimitry Andric    basic_ostream& seekp(pos_type __pos);
236*0b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
237*0b57cec5SDimitry Andric    basic_ostream& seekp(off_type __off, ios_base::seekdir __dir);
238*0b57cec5SDimitry Andric
239*0b57cec5SDimitry Andricprotected:
240*0b57cec5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
241*0b57cec5SDimitry Andric    basic_ostream() {}  // extension, intentially does not initialize
242*0b57cec5SDimitry Andric};
243*0b57cec5SDimitry Andric
244*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
245*0b57cec5SDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_ostream<_CharT, _Traits>::sentry
246*0b57cec5SDimitry Andric{
247*0b57cec5SDimitry Andric    bool __ok_;
248*0b57cec5SDimitry Andric    basic_ostream<_CharT, _Traits>& __os_;
249*0b57cec5SDimitry Andric
250*0b57cec5SDimitry Andric    sentry(const sentry&); // = delete;
251*0b57cec5SDimitry Andric    sentry& operator=(const sentry&); // = delete;
252*0b57cec5SDimitry Andric
253*0b57cec5SDimitry Andricpublic:
254*0b57cec5SDimitry Andric    explicit sentry(basic_ostream<_CharT, _Traits>& __os);
255*0b57cec5SDimitry Andric    ~sentry();
256*0b57cec5SDimitry Andric
257*0b57cec5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
258*0b57cec5SDimitry Andric        _LIBCPP_EXPLICIT
259*0b57cec5SDimitry Andric        operator bool() const {return __ok_;}
260*0b57cec5SDimitry Andric};
261*0b57cec5SDimitry Andric
262*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
263*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::sentry::sentry(basic_ostream<_CharT, _Traits>& __os)
264*0b57cec5SDimitry Andric    : __ok_(false),
265*0b57cec5SDimitry Andric      __os_(__os)
266*0b57cec5SDimitry Andric{
267*0b57cec5SDimitry Andric    if (__os.good())
268*0b57cec5SDimitry Andric    {
269*0b57cec5SDimitry Andric        if (__os.tie())
270*0b57cec5SDimitry Andric            __os.tie()->flush();
271*0b57cec5SDimitry Andric        __ok_ = true;
272*0b57cec5SDimitry Andric    }
273*0b57cec5SDimitry Andric}
274*0b57cec5SDimitry Andric
275*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
276*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::sentry::~sentry()
277*0b57cec5SDimitry Andric{
278*0b57cec5SDimitry Andric    if (__os_.rdbuf() && __os_.good() && (__os_.flags() & ios_base::unitbuf)
279*0b57cec5SDimitry Andric                      && !uncaught_exception())
280*0b57cec5SDimitry Andric    {
281*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
282*0b57cec5SDimitry Andric        try
283*0b57cec5SDimitry Andric        {
284*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
285*0b57cec5SDimitry Andric            if (__os_.rdbuf()->pubsync() == -1)
286*0b57cec5SDimitry Andric                __os_.setstate(ios_base::badbit);
287*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
288*0b57cec5SDimitry Andric        }
289*0b57cec5SDimitry Andric        catch (...)
290*0b57cec5SDimitry Andric        {
291*0b57cec5SDimitry Andric        }
292*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
293*0b57cec5SDimitry Andric    }
294*0b57cec5SDimitry Andric}
295*0b57cec5SDimitry Andric
296*0b57cec5SDimitry Andric#ifndef _LIBCPP_CXX03_LANG
297*0b57cec5SDimitry Andric
298*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
299*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::basic_ostream(basic_ostream&& __rhs)
300*0b57cec5SDimitry Andric{
301*0b57cec5SDimitry Andric    this->move(__rhs);
302*0b57cec5SDimitry Andric}
303*0b57cec5SDimitry Andric
304*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
305*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
306*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator=(basic_ostream&& __rhs)
307*0b57cec5SDimitry Andric{
308*0b57cec5SDimitry Andric    swap(__rhs);
309*0b57cec5SDimitry Andric    return *this;
310*0b57cec5SDimitry Andric}
311*0b57cec5SDimitry Andric
312*0b57cec5SDimitry Andric#endif  // _LIBCPP_CXX03_LANG
313*0b57cec5SDimitry Andric
314*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
315*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::~basic_ostream()
316*0b57cec5SDimitry Andric{
317*0b57cec5SDimitry Andric}
318*0b57cec5SDimitry Andric
319*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
320*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
321*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(basic_streambuf<char_type, traits_type>* __sb)
322*0b57cec5SDimitry Andric{
323*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
324*0b57cec5SDimitry Andric    try
325*0b57cec5SDimitry Andric    {
326*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
327*0b57cec5SDimitry Andric        sentry __s(*this);
328*0b57cec5SDimitry Andric        if (__s)
329*0b57cec5SDimitry Andric        {
330*0b57cec5SDimitry Andric            if (__sb)
331*0b57cec5SDimitry Andric            {
332*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
333*0b57cec5SDimitry Andric                try
334*0b57cec5SDimitry Andric                {
335*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
336*0b57cec5SDimitry Andric                    typedef istreambuf_iterator<_CharT, _Traits> _Ip;
337*0b57cec5SDimitry Andric                    typedef ostreambuf_iterator<_CharT, _Traits> _Op;
338*0b57cec5SDimitry Andric                    _Ip __i(__sb);
339*0b57cec5SDimitry Andric                    _Ip __eof;
340*0b57cec5SDimitry Andric                    _Op __o(*this);
341*0b57cec5SDimitry Andric                    size_t __c = 0;
342*0b57cec5SDimitry Andric                    for (; __i != __eof; ++__i, ++__o, ++__c)
343*0b57cec5SDimitry Andric                    {
344*0b57cec5SDimitry Andric                        *__o = *__i;
345*0b57cec5SDimitry Andric                        if (__o.failed())
346*0b57cec5SDimitry Andric                            break;
347*0b57cec5SDimitry Andric                    }
348*0b57cec5SDimitry Andric                    if (__c == 0)
349*0b57cec5SDimitry Andric                        this->setstate(ios_base::failbit);
350*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
351*0b57cec5SDimitry Andric                }
352*0b57cec5SDimitry Andric                catch (...)
353*0b57cec5SDimitry Andric                {
354*0b57cec5SDimitry Andric                    this->__set_failbit_and_consider_rethrow();
355*0b57cec5SDimitry Andric                }
356*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
357*0b57cec5SDimitry Andric            }
358*0b57cec5SDimitry Andric            else
359*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit);
360*0b57cec5SDimitry Andric        }
361*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
362*0b57cec5SDimitry Andric    }
363*0b57cec5SDimitry Andric    catch (...)
364*0b57cec5SDimitry Andric    {
365*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
366*0b57cec5SDimitry Andric    }
367*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
368*0b57cec5SDimitry Andric    return *this;
369*0b57cec5SDimitry Andric}
370*0b57cec5SDimitry Andric
371*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
372*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
373*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(bool __n)
374*0b57cec5SDimitry Andric{
375*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
376*0b57cec5SDimitry Andric    try
377*0b57cec5SDimitry Andric    {
378*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
379*0b57cec5SDimitry Andric        sentry __s(*this);
380*0b57cec5SDimitry Andric        if (__s)
381*0b57cec5SDimitry Andric        {
382*0b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
383*0b57cec5SDimitry Andric            const _Fp& __f = use_facet<_Fp>(this->getloc());
384*0b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
385*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
386*0b57cec5SDimitry Andric        }
387*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
388*0b57cec5SDimitry Andric    }
389*0b57cec5SDimitry Andric    catch (...)
390*0b57cec5SDimitry Andric    {
391*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
392*0b57cec5SDimitry Andric    }
393*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
394*0b57cec5SDimitry Andric    return *this;
395*0b57cec5SDimitry Andric}
396*0b57cec5SDimitry Andric
397*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
398*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
399*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(short __n)
400*0b57cec5SDimitry Andric{
401*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
402*0b57cec5SDimitry Andric    try
403*0b57cec5SDimitry Andric    {
404*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
405*0b57cec5SDimitry Andric        sentry __s(*this);
406*0b57cec5SDimitry Andric        if (__s)
407*0b57cec5SDimitry Andric        {
408*0b57cec5SDimitry Andric            ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield;
409*0b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
410*0b57cec5SDimitry Andric            const _Fp& __f = use_facet<_Fp>(this->getloc());
411*0b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(),
412*0b57cec5SDimitry Andric                        __flags == ios_base::oct || __flags == ios_base::hex ?
413*0b57cec5SDimitry Andric                        static_cast<long>(static_cast<unsigned short>(__n))  :
414*0b57cec5SDimitry Andric                        static_cast<long>(__n)).failed())
415*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
416*0b57cec5SDimitry Andric        }
417*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
418*0b57cec5SDimitry Andric    }
419*0b57cec5SDimitry Andric    catch (...)
420*0b57cec5SDimitry Andric    {
421*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
422*0b57cec5SDimitry Andric    }
423*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
424*0b57cec5SDimitry Andric    return *this;
425*0b57cec5SDimitry Andric}
426*0b57cec5SDimitry Andric
427*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
428*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
429*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned short __n)
430*0b57cec5SDimitry Andric{
431*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
432*0b57cec5SDimitry Andric    try
433*0b57cec5SDimitry Andric    {
434*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
435*0b57cec5SDimitry Andric        sentry __s(*this);
436*0b57cec5SDimitry Andric        if (__s)
437*0b57cec5SDimitry Andric        {
438*0b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
439*0b57cec5SDimitry Andric            const _Fp& __f = use_facet<_Fp>(this->getloc());
440*0b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(__n)).failed())
441*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
442*0b57cec5SDimitry Andric        }
443*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
444*0b57cec5SDimitry Andric    }
445*0b57cec5SDimitry Andric    catch (...)
446*0b57cec5SDimitry Andric    {
447*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
448*0b57cec5SDimitry Andric    }
449*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
450*0b57cec5SDimitry Andric    return *this;
451*0b57cec5SDimitry Andric}
452*0b57cec5SDimitry Andric
453*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
454*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
455*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(int __n)
456*0b57cec5SDimitry Andric{
457*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
458*0b57cec5SDimitry Andric    try
459*0b57cec5SDimitry Andric    {
460*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
461*0b57cec5SDimitry Andric        sentry __s(*this);
462*0b57cec5SDimitry Andric        if (__s)
463*0b57cec5SDimitry Andric        {
464*0b57cec5SDimitry Andric            ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield;
465*0b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
466*0b57cec5SDimitry Andric            const _Fp& __f = use_facet<_Fp>(this->getloc());
467*0b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(),
468*0b57cec5SDimitry Andric                        __flags == ios_base::oct || __flags == ios_base::hex ?
469*0b57cec5SDimitry Andric                        static_cast<long>(static_cast<unsigned int>(__n))  :
470*0b57cec5SDimitry Andric                        static_cast<long>(__n)).failed())
471*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
472*0b57cec5SDimitry Andric        }
473*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
474*0b57cec5SDimitry Andric    }
475*0b57cec5SDimitry Andric    catch (...)
476*0b57cec5SDimitry Andric    {
477*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
478*0b57cec5SDimitry Andric    }
479*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
480*0b57cec5SDimitry Andric    return *this;
481*0b57cec5SDimitry Andric}
482*0b57cec5SDimitry Andric
483*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
484*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
485*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned int __n)
486*0b57cec5SDimitry Andric{
487*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
488*0b57cec5SDimitry Andric    try
489*0b57cec5SDimitry Andric    {
490*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
491*0b57cec5SDimitry Andric        sentry __s(*this);
492*0b57cec5SDimitry Andric        if (__s)
493*0b57cec5SDimitry Andric        {
494*0b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
495*0b57cec5SDimitry Andric            const _Fp& __f = use_facet<_Fp>(this->getloc());
496*0b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(__n)).failed())
497*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
498*0b57cec5SDimitry Andric        }
499*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
500*0b57cec5SDimitry Andric    }
501*0b57cec5SDimitry Andric    catch (...)
502*0b57cec5SDimitry Andric    {
503*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
504*0b57cec5SDimitry Andric    }
505*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
506*0b57cec5SDimitry Andric    return *this;
507*0b57cec5SDimitry Andric}
508*0b57cec5SDimitry Andric
509*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
510*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
511*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(long __n)
512*0b57cec5SDimitry Andric{
513*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
514*0b57cec5SDimitry Andric    try
515*0b57cec5SDimitry Andric    {
516*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
517*0b57cec5SDimitry Andric        sentry __s(*this);
518*0b57cec5SDimitry Andric        if (__s)
519*0b57cec5SDimitry Andric        {
520*0b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
521*0b57cec5SDimitry Andric            const _Fp& __f = use_facet<_Fp>(this->getloc());
522*0b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
523*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
524*0b57cec5SDimitry Andric        }
525*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
526*0b57cec5SDimitry Andric    }
527*0b57cec5SDimitry Andric    catch (...)
528*0b57cec5SDimitry Andric    {
529*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
530*0b57cec5SDimitry Andric    }
531*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
532*0b57cec5SDimitry Andric    return *this;
533*0b57cec5SDimitry Andric}
534*0b57cec5SDimitry Andric
535*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
536*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
537*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned long __n)
538*0b57cec5SDimitry Andric{
539*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
540*0b57cec5SDimitry Andric    try
541*0b57cec5SDimitry Andric    {
542*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
543*0b57cec5SDimitry Andric        sentry __s(*this);
544*0b57cec5SDimitry Andric        if (__s)
545*0b57cec5SDimitry Andric        {
546*0b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
547*0b57cec5SDimitry Andric            const _Fp& __f = use_facet<_Fp>(this->getloc());
548*0b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
549*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
550*0b57cec5SDimitry Andric        }
551*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
552*0b57cec5SDimitry Andric    }
553*0b57cec5SDimitry Andric    catch (...)
554*0b57cec5SDimitry Andric    {
555*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
556*0b57cec5SDimitry Andric    }
557*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
558*0b57cec5SDimitry Andric    return *this;
559*0b57cec5SDimitry Andric}
560*0b57cec5SDimitry Andric
561*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
562*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
563*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(long long __n)
564*0b57cec5SDimitry Andric{
565*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
566*0b57cec5SDimitry Andric    try
567*0b57cec5SDimitry Andric    {
568*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
569*0b57cec5SDimitry Andric        sentry __s(*this);
570*0b57cec5SDimitry Andric        if (__s)
571*0b57cec5SDimitry Andric        {
572*0b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
573*0b57cec5SDimitry Andric            const _Fp& __f = use_facet<_Fp>(this->getloc());
574*0b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
575*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
576*0b57cec5SDimitry Andric        }
577*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
578*0b57cec5SDimitry Andric    }
579*0b57cec5SDimitry Andric    catch (...)
580*0b57cec5SDimitry Andric    {
581*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
582*0b57cec5SDimitry Andric    }
583*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
584*0b57cec5SDimitry Andric    return *this;
585*0b57cec5SDimitry Andric}
586*0b57cec5SDimitry Andric
587*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
588*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
589*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned long long __n)
590*0b57cec5SDimitry Andric{
591*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
592*0b57cec5SDimitry Andric    try
593*0b57cec5SDimitry Andric    {
594*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
595*0b57cec5SDimitry Andric        sentry __s(*this);
596*0b57cec5SDimitry Andric        if (__s)
597*0b57cec5SDimitry Andric        {
598*0b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
599*0b57cec5SDimitry Andric            const _Fp& __f = use_facet<_Fp>(this->getloc());
600*0b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
601*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
602*0b57cec5SDimitry Andric        }
603*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
604*0b57cec5SDimitry Andric    }
605*0b57cec5SDimitry Andric    catch (...)
606*0b57cec5SDimitry Andric    {
607*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
608*0b57cec5SDimitry Andric    }
609*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
610*0b57cec5SDimitry Andric    return *this;
611*0b57cec5SDimitry Andric}
612*0b57cec5SDimitry Andric
613*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
614*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
615*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(float __n)
616*0b57cec5SDimitry Andric{
617*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
618*0b57cec5SDimitry Andric    try
619*0b57cec5SDimitry Andric    {
620*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
621*0b57cec5SDimitry Andric        sentry __s(*this);
622*0b57cec5SDimitry Andric        if (__s)
623*0b57cec5SDimitry Andric        {
624*0b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
625*0b57cec5SDimitry Andric            const _Fp& __f = use_facet<_Fp>(this->getloc());
626*0b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), static_cast<double>(__n)).failed())
627*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
628*0b57cec5SDimitry Andric        }
629*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
630*0b57cec5SDimitry Andric    }
631*0b57cec5SDimitry Andric    catch (...)
632*0b57cec5SDimitry Andric    {
633*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
634*0b57cec5SDimitry Andric    }
635*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
636*0b57cec5SDimitry Andric    return *this;
637*0b57cec5SDimitry Andric}
638*0b57cec5SDimitry Andric
639*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
640*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
641*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(double __n)
642*0b57cec5SDimitry Andric{
643*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
644*0b57cec5SDimitry Andric    try
645*0b57cec5SDimitry Andric    {
646*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
647*0b57cec5SDimitry Andric        sentry __s(*this);
648*0b57cec5SDimitry Andric        if (__s)
649*0b57cec5SDimitry Andric        {
650*0b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
651*0b57cec5SDimitry Andric            const _Fp& __f = use_facet<_Fp>(this->getloc());
652*0b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
653*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
654*0b57cec5SDimitry Andric        }
655*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
656*0b57cec5SDimitry Andric    }
657*0b57cec5SDimitry Andric    catch (...)
658*0b57cec5SDimitry Andric    {
659*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
660*0b57cec5SDimitry Andric    }
661*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
662*0b57cec5SDimitry Andric    return *this;
663*0b57cec5SDimitry Andric}
664*0b57cec5SDimitry Andric
665*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
666*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
667*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(long double __n)
668*0b57cec5SDimitry Andric{
669*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
670*0b57cec5SDimitry Andric    try
671*0b57cec5SDimitry Andric    {
672*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
673*0b57cec5SDimitry Andric        sentry __s(*this);
674*0b57cec5SDimitry Andric        if (__s)
675*0b57cec5SDimitry Andric        {
676*0b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
677*0b57cec5SDimitry Andric            const _Fp& __f = use_facet<_Fp>(this->getloc());
678*0b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
679*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
680*0b57cec5SDimitry Andric        }
681*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
682*0b57cec5SDimitry Andric    }
683*0b57cec5SDimitry Andric    catch (...)
684*0b57cec5SDimitry Andric    {
685*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
686*0b57cec5SDimitry Andric    }
687*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
688*0b57cec5SDimitry Andric    return *this;
689*0b57cec5SDimitry Andric}
690*0b57cec5SDimitry Andric
691*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
692*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
693*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(const void* __n)
694*0b57cec5SDimitry Andric{
695*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
696*0b57cec5SDimitry Andric    try
697*0b57cec5SDimitry Andric    {
698*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
699*0b57cec5SDimitry Andric        sentry __s(*this);
700*0b57cec5SDimitry Andric        if (__s)
701*0b57cec5SDimitry Andric        {
702*0b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
703*0b57cec5SDimitry Andric            const _Fp& __f = use_facet<_Fp>(this->getloc());
704*0b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
705*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
706*0b57cec5SDimitry Andric        }
707*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
708*0b57cec5SDimitry Andric    }
709*0b57cec5SDimitry Andric    catch (...)
710*0b57cec5SDimitry Andric    {
711*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
712*0b57cec5SDimitry Andric    }
713*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
714*0b57cec5SDimitry Andric    return *this;
715*0b57cec5SDimitry Andric}
716*0b57cec5SDimitry Andric
717*0b57cec5SDimitry Andrictemplate<class _CharT, class _Traits>
718*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
719*0b57cec5SDimitry Andric__put_character_sequence(basic_ostream<_CharT, _Traits>& __os,
720*0b57cec5SDimitry Andric                          const _CharT* __str, size_t __len)
721*0b57cec5SDimitry Andric{
722*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
723*0b57cec5SDimitry Andric    try
724*0b57cec5SDimitry Andric    {
725*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
726*0b57cec5SDimitry Andric        typename basic_ostream<_CharT, _Traits>::sentry __s(__os);
727*0b57cec5SDimitry Andric        if (__s)
728*0b57cec5SDimitry Andric        {
729*0b57cec5SDimitry Andric            typedef ostreambuf_iterator<_CharT, _Traits> _Ip;
730*0b57cec5SDimitry Andric            if (__pad_and_output(_Ip(__os),
731*0b57cec5SDimitry Andric                                 __str,
732*0b57cec5SDimitry Andric                                 (__os.flags() & ios_base::adjustfield) == ios_base::left ?
733*0b57cec5SDimitry Andric                                     __str + __len :
734*0b57cec5SDimitry Andric                                     __str,
735*0b57cec5SDimitry Andric                                 __str + __len,
736*0b57cec5SDimitry Andric                                 __os,
737*0b57cec5SDimitry Andric                                 __os.fill()).failed())
738*0b57cec5SDimitry Andric                __os.setstate(ios_base::badbit | ios_base::failbit);
739*0b57cec5SDimitry Andric        }
740*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
741*0b57cec5SDimitry Andric    }
742*0b57cec5SDimitry Andric    catch (...)
743*0b57cec5SDimitry Andric    {
744*0b57cec5SDimitry Andric        __os.__set_badbit_and_consider_rethrow();
745*0b57cec5SDimitry Andric    }
746*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
747*0b57cec5SDimitry Andric    return __os;
748*0b57cec5SDimitry Andric}
749*0b57cec5SDimitry Andric
750*0b57cec5SDimitry Andric
751*0b57cec5SDimitry Andrictemplate<class _CharT, class _Traits>
752*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
753*0b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, _CharT __c)
754*0b57cec5SDimitry Andric{
755*0b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, &__c, 1);
756*0b57cec5SDimitry Andric}
757*0b57cec5SDimitry Andric
758*0b57cec5SDimitry Andrictemplate<class _CharT, class _Traits>
759*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
760*0b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, char __cn)
761*0b57cec5SDimitry Andric{
762*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
763*0b57cec5SDimitry Andric    try
764*0b57cec5SDimitry Andric    {
765*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
766*0b57cec5SDimitry Andric        typename basic_ostream<_CharT, _Traits>::sentry __s(__os);
767*0b57cec5SDimitry Andric        if (__s)
768*0b57cec5SDimitry Andric        {
769*0b57cec5SDimitry Andric            _CharT __c = __os.widen(__cn);
770*0b57cec5SDimitry Andric            typedef ostreambuf_iterator<_CharT, _Traits> _Ip;
771*0b57cec5SDimitry Andric            if (__pad_and_output(_Ip(__os),
772*0b57cec5SDimitry Andric                                 &__c,
773*0b57cec5SDimitry Andric                                 (__os.flags() & ios_base::adjustfield) == ios_base::left ?
774*0b57cec5SDimitry Andric                                     &__c + 1 :
775*0b57cec5SDimitry Andric                                     &__c,
776*0b57cec5SDimitry Andric                                 &__c + 1,
777*0b57cec5SDimitry Andric                                 __os,
778*0b57cec5SDimitry Andric                                 __os.fill()).failed())
779*0b57cec5SDimitry Andric                __os.setstate(ios_base::badbit | ios_base::failbit);
780*0b57cec5SDimitry Andric        }
781*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
782*0b57cec5SDimitry Andric    }
783*0b57cec5SDimitry Andric    catch (...)
784*0b57cec5SDimitry Andric    {
785*0b57cec5SDimitry Andric        __os.__set_badbit_and_consider_rethrow();
786*0b57cec5SDimitry Andric    }
787*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
788*0b57cec5SDimitry Andric    return __os;
789*0b57cec5SDimitry Andric}
790*0b57cec5SDimitry Andric
791*0b57cec5SDimitry Andrictemplate<class _Traits>
792*0b57cec5SDimitry Andricbasic_ostream<char, _Traits>&
793*0b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, char __c)
794*0b57cec5SDimitry Andric{
795*0b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, &__c, 1);
796*0b57cec5SDimitry Andric}
797*0b57cec5SDimitry Andric
798*0b57cec5SDimitry Andrictemplate<class _Traits>
799*0b57cec5SDimitry Andricbasic_ostream<char, _Traits>&
800*0b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, signed char __c)
801*0b57cec5SDimitry Andric{
802*0b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, (char *) &__c, 1);
803*0b57cec5SDimitry Andric}
804*0b57cec5SDimitry Andric
805*0b57cec5SDimitry Andrictemplate<class _Traits>
806*0b57cec5SDimitry Andricbasic_ostream<char, _Traits>&
807*0b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, unsigned char __c)
808*0b57cec5SDimitry Andric{
809*0b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, (char *) &__c, 1);
810*0b57cec5SDimitry Andric}
811*0b57cec5SDimitry Andric
812*0b57cec5SDimitry Andrictemplate<class _CharT, class _Traits>
813*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
814*0b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const _CharT* __str)
815*0b57cec5SDimitry Andric{
816*0b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str));
817*0b57cec5SDimitry Andric}
818*0b57cec5SDimitry Andric
819*0b57cec5SDimitry Andrictemplate<class _CharT, class _Traits>
820*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
821*0b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const char* __strn)
822*0b57cec5SDimitry Andric{
823*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
824*0b57cec5SDimitry Andric    try
825*0b57cec5SDimitry Andric    {
826*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
827*0b57cec5SDimitry Andric        typename basic_ostream<_CharT, _Traits>::sentry __s(__os);
828*0b57cec5SDimitry Andric        if (__s)
829*0b57cec5SDimitry Andric        {
830*0b57cec5SDimitry Andric            typedef ostreambuf_iterator<_CharT, _Traits> _Ip;
831*0b57cec5SDimitry Andric            size_t __len = char_traits<char>::length(__strn);
832*0b57cec5SDimitry Andric            const int __bs = 100;
833*0b57cec5SDimitry Andric            _CharT __wbb[__bs];
834*0b57cec5SDimitry Andric            _CharT* __wb = __wbb;
835*0b57cec5SDimitry Andric            unique_ptr<_CharT, void(*)(void*)> __h(0, free);
836*0b57cec5SDimitry Andric            if (__len > __bs)
837*0b57cec5SDimitry Andric            {
838*0b57cec5SDimitry Andric                __wb = (_CharT*)malloc(__len*sizeof(_CharT));
839*0b57cec5SDimitry Andric                if (__wb == 0)
840*0b57cec5SDimitry Andric                    __throw_bad_alloc();
841*0b57cec5SDimitry Andric                __h.reset(__wb);
842*0b57cec5SDimitry Andric            }
843*0b57cec5SDimitry Andric            for (_CharT* __p = __wb; *__strn != '\0'; ++__strn, ++__p)
844*0b57cec5SDimitry Andric                *__p = __os.widen(*__strn);
845*0b57cec5SDimitry Andric            if (__pad_and_output(_Ip(__os),
846*0b57cec5SDimitry Andric                                 __wb,
847*0b57cec5SDimitry Andric                                 (__os.flags() & ios_base::adjustfield) == ios_base::left ?
848*0b57cec5SDimitry Andric                                     __wb + __len :
849*0b57cec5SDimitry Andric                                     __wb,
850*0b57cec5SDimitry Andric                                 __wb + __len,
851*0b57cec5SDimitry Andric                                 __os,
852*0b57cec5SDimitry Andric                                 __os.fill()).failed())
853*0b57cec5SDimitry Andric                __os.setstate(ios_base::badbit | ios_base::failbit);
854*0b57cec5SDimitry Andric        }
855*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
856*0b57cec5SDimitry Andric    }
857*0b57cec5SDimitry Andric    catch (...)
858*0b57cec5SDimitry Andric    {
859*0b57cec5SDimitry Andric        __os.__set_badbit_and_consider_rethrow();
860*0b57cec5SDimitry Andric    }
861*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
862*0b57cec5SDimitry Andric    return __os;
863*0b57cec5SDimitry Andric}
864*0b57cec5SDimitry Andric
865*0b57cec5SDimitry Andrictemplate<class _Traits>
866*0b57cec5SDimitry Andricbasic_ostream<char, _Traits>&
867*0b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, const char* __str)
868*0b57cec5SDimitry Andric{
869*0b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str));
870*0b57cec5SDimitry Andric}
871*0b57cec5SDimitry Andric
872*0b57cec5SDimitry Andrictemplate<class _Traits>
873*0b57cec5SDimitry Andricbasic_ostream<char, _Traits>&
874*0b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, const signed char* __str)
875*0b57cec5SDimitry Andric{
876*0b57cec5SDimitry Andric    const char *__s = (const char *) __str;
877*0b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s));
878*0b57cec5SDimitry Andric}
879*0b57cec5SDimitry Andric
880*0b57cec5SDimitry Andrictemplate<class _Traits>
881*0b57cec5SDimitry Andricbasic_ostream<char, _Traits>&
882*0b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, const unsigned char* __str)
883*0b57cec5SDimitry Andric{
884*0b57cec5SDimitry Andric    const char *__s = (const char *) __str;
885*0b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s));
886*0b57cec5SDimitry Andric}
887*0b57cec5SDimitry Andric
888*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
889*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
890*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::put(char_type __c)
891*0b57cec5SDimitry Andric{
892*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
893*0b57cec5SDimitry Andric    try
894*0b57cec5SDimitry Andric    {
895*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
896*0b57cec5SDimitry Andric        sentry __s(*this);
897*0b57cec5SDimitry Andric        if (__s)
898*0b57cec5SDimitry Andric        {
899*0b57cec5SDimitry Andric            typedef ostreambuf_iterator<_CharT, _Traits> _Op;
900*0b57cec5SDimitry Andric            _Op __o(*this);
901*0b57cec5SDimitry Andric            *__o = __c;
902*0b57cec5SDimitry Andric            if (__o.failed())
903*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit);
904*0b57cec5SDimitry Andric        }
905*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
906*0b57cec5SDimitry Andric    }
907*0b57cec5SDimitry Andric    catch (...)
908*0b57cec5SDimitry Andric    {
909*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
910*0b57cec5SDimitry Andric    }
911*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
912*0b57cec5SDimitry Andric    return *this;
913*0b57cec5SDimitry Andric}
914*0b57cec5SDimitry Andric
915*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
916*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
917*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::write(const char_type* __s, streamsize __n)
918*0b57cec5SDimitry Andric{
919*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
920*0b57cec5SDimitry Andric    try
921*0b57cec5SDimitry Andric    {
922*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
923*0b57cec5SDimitry Andric        sentry __sen(*this);
924*0b57cec5SDimitry Andric        if (__sen && __n)
925*0b57cec5SDimitry Andric        {
926*0b57cec5SDimitry Andric            if (this->rdbuf()->sputn(__s, __n) != __n)
927*0b57cec5SDimitry Andric                this->setstate(ios_base::badbit);
928*0b57cec5SDimitry Andric        }
929*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
930*0b57cec5SDimitry Andric    }
931*0b57cec5SDimitry Andric    catch (...)
932*0b57cec5SDimitry Andric    {
933*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
934*0b57cec5SDimitry Andric    }
935*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
936*0b57cec5SDimitry Andric    return *this;
937*0b57cec5SDimitry Andric}
938*0b57cec5SDimitry Andric
939*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
940*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
941*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::flush()
942*0b57cec5SDimitry Andric{
943*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
944*0b57cec5SDimitry Andric    try
945*0b57cec5SDimitry Andric    {
946*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
947*0b57cec5SDimitry Andric        if (this->rdbuf())
948*0b57cec5SDimitry Andric        {
949*0b57cec5SDimitry Andric            sentry __s(*this);
950*0b57cec5SDimitry Andric            if (__s)
951*0b57cec5SDimitry Andric            {
952*0b57cec5SDimitry Andric                if (this->rdbuf()->pubsync() == -1)
953*0b57cec5SDimitry Andric                    this->setstate(ios_base::badbit);
954*0b57cec5SDimitry Andric            }
955*0b57cec5SDimitry Andric        }
956*0b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS
957*0b57cec5SDimitry Andric    }
958*0b57cec5SDimitry Andric    catch (...)
959*0b57cec5SDimitry Andric    {
960*0b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
961*0b57cec5SDimitry Andric    }
962*0b57cec5SDimitry Andric#endif  // _LIBCPP_NO_EXCEPTIONS
963*0b57cec5SDimitry Andric    return *this;
964*0b57cec5SDimitry Andric}
965*0b57cec5SDimitry Andric
966*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
967*0b57cec5SDimitry Andrictypename basic_ostream<_CharT, _Traits>::pos_type
968*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::tellp()
969*0b57cec5SDimitry Andric{
970*0b57cec5SDimitry Andric    if (this->fail())
971*0b57cec5SDimitry Andric        return pos_type(-1);
972*0b57cec5SDimitry Andric    return this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out);
973*0b57cec5SDimitry Andric}
974*0b57cec5SDimitry Andric
975*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
976*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
977*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::seekp(pos_type __pos)
978*0b57cec5SDimitry Andric{
979*0b57cec5SDimitry Andric    sentry __s(*this);
980*0b57cec5SDimitry Andric    if (!this->fail())
981*0b57cec5SDimitry Andric    {
982*0b57cec5SDimitry Andric        if (this->rdbuf()->pubseekpos(__pos, ios_base::out) == pos_type(-1))
983*0b57cec5SDimitry Andric            this->setstate(ios_base::failbit);
984*0b57cec5SDimitry Andric    }
985*0b57cec5SDimitry Andric    return *this;
986*0b57cec5SDimitry Andric}
987*0b57cec5SDimitry Andric
988*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
989*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
990*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::seekp(off_type __off, ios_base::seekdir __dir)
991*0b57cec5SDimitry Andric{
992*0b57cec5SDimitry Andric    sentry __s(*this);
993*0b57cec5SDimitry Andric    if (!this->fail())
994*0b57cec5SDimitry Andric    {
995*0b57cec5SDimitry Andric        if (this->rdbuf()->pubseekoff(__off, __dir, ios_base::out) == pos_type(-1))
996*0b57cec5SDimitry Andric            this->setstate(ios_base::failbit);
997*0b57cec5SDimitry Andric    }
998*0b57cec5SDimitry Andric    return *this;
999*0b57cec5SDimitry Andric}
1000*0b57cec5SDimitry Andric
1001*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
1002*0b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY
1003*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
1004*0b57cec5SDimitry Andricendl(basic_ostream<_CharT, _Traits>& __os)
1005*0b57cec5SDimitry Andric{
1006*0b57cec5SDimitry Andric    __os.put(__os.widen('\n'));
1007*0b57cec5SDimitry Andric    __os.flush();
1008*0b57cec5SDimitry Andric    return __os;
1009*0b57cec5SDimitry Andric}
1010*0b57cec5SDimitry Andric
1011*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
1012*0b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY
1013*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
1014*0b57cec5SDimitry Andricends(basic_ostream<_CharT, _Traits>& __os)
1015*0b57cec5SDimitry Andric{
1016*0b57cec5SDimitry Andric    __os.put(_CharT());
1017*0b57cec5SDimitry Andric    return __os;
1018*0b57cec5SDimitry Andric}
1019*0b57cec5SDimitry Andric
1020*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
1021*0b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY
1022*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
1023*0b57cec5SDimitry Andricflush(basic_ostream<_CharT, _Traits>& __os)
1024*0b57cec5SDimitry Andric{
1025*0b57cec5SDimitry Andric    __os.flush();
1026*0b57cec5SDimitry Andric    return __os;
1027*0b57cec5SDimitry Andric}
1028*0b57cec5SDimitry Andric
1029*0b57cec5SDimitry Andric#ifndef _LIBCPP_CXX03_LANG
1030*0b57cec5SDimitry Andric
1031*0b57cec5SDimitry Andrictemplate <class _Stream, class _Tp>
1032*0b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY
1033*0b57cec5SDimitry Andrictypename enable_if
1034*0b57cec5SDimitry Andric<
1035*0b57cec5SDimitry Andric    !is_lvalue_reference<_Stream>::value &&
1036*0b57cec5SDimitry Andric    is_base_of<ios_base, _Stream>::value,
1037*0b57cec5SDimitry Andric    _Stream&&
1038*0b57cec5SDimitry Andric>::type
1039*0b57cec5SDimitry Andricoperator<<(_Stream&& __os, const _Tp& __x)
1040*0b57cec5SDimitry Andric{
1041*0b57cec5SDimitry Andric    __os << __x;
1042*0b57cec5SDimitry Andric    return _VSTD::move(__os);
1043*0b57cec5SDimitry Andric}
1044*0b57cec5SDimitry Andric
1045*0b57cec5SDimitry Andric#endif  // _LIBCPP_CXX03_LANG
1046*0b57cec5SDimitry Andric
1047*0b57cec5SDimitry Andrictemplate<class _CharT, class _Traits, class _Allocator>
1048*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
1049*0b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os,
1050*0b57cec5SDimitry Andric           const basic_string<_CharT, _Traits, _Allocator>& __str)
1051*0b57cec5SDimitry Andric{
1052*0b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, __str.data(), __str.size());
1053*0b57cec5SDimitry Andric}
1054*0b57cec5SDimitry Andric
1055*0b57cec5SDimitry Andrictemplate<class _CharT, class _Traits>
1056*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
1057*0b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os,
1058*0b57cec5SDimitry Andric           const basic_string_view<_CharT, _Traits> __sv)
1059*0b57cec5SDimitry Andric{
1060*0b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, __sv.data(), __sv.size());
1061*0b57cec5SDimitry Andric}
1062*0b57cec5SDimitry Andric
1063*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
1064*0b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY
1065*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
1066*0b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __ec)
1067*0b57cec5SDimitry Andric{
1068*0b57cec5SDimitry Andric    return __os << __ec.category().name() << ':' << __ec.value();
1069*0b57cec5SDimitry Andric}
1070*0b57cec5SDimitry Andric
1071*0b57cec5SDimitry Andrictemplate<class _CharT, class _Traits, class _Yp>
1072*0b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY
1073*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
1074*0b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, shared_ptr<_Yp> const& __p)
1075*0b57cec5SDimitry Andric{
1076*0b57cec5SDimitry Andric    return __os << __p.get();
1077*0b57cec5SDimitry Andric}
1078*0b57cec5SDimitry Andric
1079*0b57cec5SDimitry Andrictemplate<class _CharT, class _Traits, class _Yp, class _Dp>
1080*0b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY
1081*0b57cec5SDimitry Andrictypename enable_if
1082*0b57cec5SDimitry Andric<
1083*0b57cec5SDimitry Andric    is_same<void, typename __void_t<decltype((declval<basic_ostream<_CharT, _Traits>&>() << declval<typename unique_ptr<_Yp, _Dp>::pointer>()))>::type>::value,
1084*0b57cec5SDimitry Andric    basic_ostream<_CharT, _Traits>&
1085*0b57cec5SDimitry Andric>::type
1086*0b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, unique_ptr<_Yp, _Dp> const& __p)
1087*0b57cec5SDimitry Andric{
1088*0b57cec5SDimitry Andric    return __os << __p.get();
1089*0b57cec5SDimitry Andric}
1090*0b57cec5SDimitry Andric
1091*0b57cec5SDimitry Andrictemplate <class _CharT, class _Traits, size_t _Size>
1092*0b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
1093*0b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const bitset<_Size>& __x)
1094*0b57cec5SDimitry Andric{
1095*0b57cec5SDimitry Andric    return __os << __x.template to_string<_CharT, _Traits>
1096*0b57cec5SDimitry Andric                        (use_facet<ctype<_CharT> >(__os.getloc()).widen('0'),
1097*0b57cec5SDimitry Andric                         use_facet<ctype<_CharT> >(__os.getloc()).widen('1'));
1098*0b57cec5SDimitry Andric}
1099*0b57cec5SDimitry Andric
1100*0b57cec5SDimitry Andric#ifndef _LIBCPP_DO_NOT_ASSUME_STREAMS_EXPLICIT_INSTANTIATION_IN_DYLIB
1101*0b57cec5SDimitry Andric_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<char>)
1102*0b57cec5SDimitry Andric_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<wchar_t>)
1103*0b57cec5SDimitry Andric#endif
1104*0b57cec5SDimitry Andric
1105*0b57cec5SDimitry Andric_LIBCPP_END_NAMESPACE_STD
1106*0b57cec5SDimitry Andric
1107*0b57cec5SDimitry Andric#endif  // _LIBCPP_OSTREAM
1108