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