xref: /freebsd-12.1/contrib/libc++/include/ostream (revision b5893f02)
17a984708SDavid Chisnall// -*- C++ -*-
27a984708SDavid Chisnall//===-------------------------- ostream -----------------------------------===//
37a984708SDavid Chisnall//
47a984708SDavid Chisnall//                     The LLVM Compiler Infrastructure
57a984708SDavid Chisnall//
67a984708SDavid Chisnall// This file is dual licensed under the MIT and the University of Illinois Open
77a984708SDavid Chisnall// Source Licenses. See LICENSE.TXT for details.
87a984708SDavid Chisnall//
97a984708SDavid Chisnall//===----------------------------------------------------------------------===//
107a984708SDavid Chisnall
117a984708SDavid Chisnall#ifndef _LIBCPP_OSTREAM
127a984708SDavid Chisnall#define _LIBCPP_OSTREAM
137a984708SDavid Chisnall
147a984708SDavid Chisnall/*
157a984708SDavid Chisnall    ostream synopsis
167a984708SDavid Chisnall
177a984708SDavid Chisnalltemplate <class charT, class traits = char_traits<charT> >
187a984708SDavid Chisnallclass basic_ostream
197a984708SDavid Chisnall    : virtual public basic_ios<charT,traits>
207a984708SDavid Chisnall{
217a984708SDavid Chisnallpublic:
227a984708SDavid Chisnall    // types (inherited from basic_ios (27.5.4)):
237a984708SDavid Chisnall    typedef charT                          char_type;
247a984708SDavid Chisnall    typedef traits                         traits_type;
257a984708SDavid Chisnall    typedef typename traits_type::int_type int_type;
267a984708SDavid Chisnall    typedef typename traits_type::pos_type pos_type;
277a984708SDavid Chisnall    typedef typename traits_type::off_type off_type;
287a984708SDavid Chisnall
297a984708SDavid Chisnall    // 27.7.2.2 Constructor/destructor:
307a984708SDavid Chisnall    explicit basic_ostream(basic_streambuf<char_type,traits>* sb);
317a984708SDavid Chisnall    basic_ostream(basic_ostream&& rhs);
327a984708SDavid Chisnall    virtual ~basic_ostream();
337a984708SDavid Chisnall
347a984708SDavid Chisnall    // 27.7.2.3 Assign/swap
354f7ab58eSDimitry Andric    basic_ostream& operator=(const basic_ostream& rhs) = delete; // C++14
367a984708SDavid Chisnall    basic_ostream& operator=(basic_ostream&& rhs);
377a984708SDavid Chisnall    void swap(basic_ostream& rhs);
387a984708SDavid Chisnall
397a984708SDavid Chisnall    // 27.7.2.4 Prefix/suffix:
407a984708SDavid Chisnall    class sentry;
417a984708SDavid Chisnall
427a984708SDavid Chisnall    // 27.7.2.6 Formatted output:
437a984708SDavid Chisnall    basic_ostream& operator<<(basic_ostream& (*pf)(basic_ostream&));
447a984708SDavid Chisnall    basic_ostream& operator<<(basic_ios<charT, traits>& (*pf)(basic_ios<charT,traits>&));
457a984708SDavid Chisnall    basic_ostream& operator<<(ios_base& (*pf)(ios_base&));
467a984708SDavid Chisnall    basic_ostream& operator<<(bool n);
477a984708SDavid Chisnall    basic_ostream& operator<<(short n);
487a984708SDavid Chisnall    basic_ostream& operator<<(unsigned short n);
497a984708SDavid Chisnall    basic_ostream& operator<<(int n);
507a984708SDavid Chisnall    basic_ostream& operator<<(unsigned int n);
517a984708SDavid Chisnall    basic_ostream& operator<<(long n);
527a984708SDavid Chisnall    basic_ostream& operator<<(unsigned long n);
537a984708SDavid Chisnall    basic_ostream& operator<<(long long n);
547a984708SDavid Chisnall    basic_ostream& operator<<(unsigned long long n);
557a984708SDavid Chisnall    basic_ostream& operator<<(float f);
567a984708SDavid Chisnall    basic_ostream& operator<<(double f);
577a984708SDavid Chisnall    basic_ostream& operator<<(long double f);
587a984708SDavid Chisnall    basic_ostream& operator<<(const void* p);
597a984708SDavid Chisnall    basic_ostream& operator<<(basic_streambuf<char_type,traits>* sb);
607a984708SDavid Chisnall
617a984708SDavid Chisnall    // 27.7.2.7 Unformatted output:
627a984708SDavid Chisnall    basic_ostream& put(char_type c);
637a984708SDavid Chisnall    basic_ostream& write(const char_type* s, streamsize n);
647a984708SDavid Chisnall    basic_ostream& flush();
657a984708SDavid Chisnall
667a984708SDavid Chisnall    // 27.7.2.5 seeks:
677a984708SDavid Chisnall    pos_type tellp();
687a984708SDavid Chisnall    basic_ostream& seekp(pos_type);
697a984708SDavid Chisnall    basic_ostream& seekp(off_type, ios_base::seekdir);
70d72607e9SDimitry Andricprotected:
71d72607e9SDimitry Andric    basic_ostream(const basic_ostream& rhs) = delete;
72d72607e9SDimitry Andric    basic_ostream(basic_ostream&& rhs);
73d72607e9SDimitry Andric    // 27.7.3.3 Assign/swap
74d72607e9SDimitry Andric    basic_ostream& operator=(basic_ostream& rhs) = delete;
75d72607e9SDimitry Andric    basic_ostream& operator=(const basic_ostream&& rhs);
76d72607e9SDimitry Andric    void swap(basic_ostream& rhs);
777a984708SDavid Chisnall};
787a984708SDavid Chisnall
797a984708SDavid Chisnall// 27.7.2.6.4 character inserters
807a984708SDavid Chisnall
817a984708SDavid Chisnalltemplate<class charT, class traits>
827a984708SDavid Chisnall  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, charT);
837a984708SDavid Chisnall
847a984708SDavid Chisnalltemplate<class charT, class traits>
857a984708SDavid Chisnall  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, char);
867a984708SDavid Chisnall
877a984708SDavid Chisnalltemplate<class traits>
887a984708SDavid Chisnall  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, char);
897a984708SDavid Chisnall
907a984708SDavid Chisnall// signed and unsigned
917a984708SDavid Chisnall
927a984708SDavid Chisnalltemplate<class traits>
937a984708SDavid Chisnall  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, signed char);
947a984708SDavid Chisnall
957a984708SDavid Chisnalltemplate<class traits>
967a984708SDavid Chisnall  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, unsigned char);
977a984708SDavid Chisnall
987a984708SDavid Chisnall// NTBS
997a984708SDavid Chisnalltemplate<class charT, class traits>
1007a984708SDavid Chisnall  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const charT*);
1017a984708SDavid Chisnall
1027a984708SDavid Chisnalltemplate<class charT, class traits>
1037a984708SDavid Chisnall  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const char*);
1047a984708SDavid Chisnall
1057a984708SDavid Chisnalltemplate<class traits>
1067a984708SDavid Chisnall  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const char*);
1077a984708SDavid Chisnall
1087a984708SDavid Chisnall// signed and unsigned
1097a984708SDavid Chisnalltemplate<class traits>
1107a984708SDavid Chisnallbasic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const signed char*);
1117a984708SDavid Chisnall
1127a984708SDavid Chisnalltemplate<class traits>
1137a984708SDavid Chisnall  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const unsigned char*);
1147a984708SDavid Chisnall
1157a984708SDavid Chisnall// swap:
1167a984708SDavid Chisnalltemplate <class charT, class traits>
1177a984708SDavid Chisnall  void swap(basic_ostream<charT, traits>& x, basic_ostream<charT, traits>& y);
1187a984708SDavid Chisnall
1197a984708SDavid Chisnalltemplate <class charT, class traits>
1207a984708SDavid Chisnall  basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
1217a984708SDavid Chisnall
1227a984708SDavid Chisnalltemplate <class charT, class traits>
1237a984708SDavid Chisnall  basic_ostream<charT,traits>& ends(basic_ostream<charT,traits>& os);
1247a984708SDavid Chisnall
1257a984708SDavid Chisnalltemplate <class charT, class traits>
1267a984708SDavid Chisnall  basic_ostream<charT,traits>& flush(basic_ostream<charT,traits>& os);
1277a984708SDavid Chisnall
1287a984708SDavid Chisnall// rvalue stream insertion
1297a984708SDavid Chisnalltemplate <class charT, class traits, class T>
1307a984708SDavid Chisnall  basic_ostream<charT, traits>&
1317a984708SDavid Chisnall  operator<<(basic_ostream<charT, traits>&& os, const T& x);
1327a984708SDavid Chisnall
1337a984708SDavid Chisnall}  // std
1347a984708SDavid Chisnall
1357a984708SDavid Chisnall*/
1367a984708SDavid Chisnall
1377a984708SDavid Chisnall#include <__config>
1387a984708SDavid Chisnall#include <ios>
1397a984708SDavid Chisnall#include <streambuf>
1407a984708SDavid Chisnall#include <locale>
1417a984708SDavid Chisnall#include <iterator>
1427a984708SDavid Chisnall#include <bitset>
143*b5893f02SDimitry Andric#include <version>
1447a984708SDavid Chisnall
1457a984708SDavid Chisnall#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1467a984708SDavid Chisnall#pragma GCC system_header
1477a984708SDavid Chisnall#endif
1487a984708SDavid Chisnall
1497a984708SDavid Chisnall_LIBCPP_BEGIN_NAMESPACE_STD
1507a984708SDavid Chisnall
1517a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
152aed8d94eSDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_ostream
1537a984708SDavid Chisnall    : virtual public basic_ios<_CharT, _Traits>
1547a984708SDavid Chisnall{
1557a984708SDavid Chisnallpublic:
1567a984708SDavid Chisnall    // types (inherited from basic_ios (27.5.4)):
1577a984708SDavid Chisnall    typedef _CharT                         char_type;
1587a984708SDavid Chisnall    typedef _Traits                        traits_type;
1597a984708SDavid Chisnall    typedef typename traits_type::int_type int_type;
1607a984708SDavid Chisnall    typedef typename traits_type::pos_type pos_type;
1617a984708SDavid Chisnall    typedef typename traits_type::off_type off_type;
1627a984708SDavid Chisnall
1637a984708SDavid Chisnall    // 27.7.2.2 Constructor/destructor:
164*b5893f02SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
165aed8d94eSDimitry Andric    explicit basic_ostream(basic_streambuf<char_type, traits_type>* __sb)
166aed8d94eSDimitry Andric    { this->init(__sb); }
1677a984708SDavid Chisnall    virtual ~basic_ostream();
1687a984708SDavid Chisnallprotected:
169540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG
170aed8d94eSDimitry Andric    inline _LIBCPP_INLINE_VISIBILITY
1717a984708SDavid Chisnall    basic_ostream(basic_ostream&& __rhs);
1727a984708SDavid Chisnall
1737a984708SDavid Chisnall    // 27.7.2.3 Assign/swap
174aed8d94eSDimitry Andric    inline _LIBCPP_INLINE_VISIBILITY
1757a984708SDavid Chisnall    basic_ostream& operator=(basic_ostream&& __rhs);
1767a984708SDavid Chisnall#endif
177*b5893f02SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
178aed8d94eSDimitry Andric    void swap(basic_ostream& __rhs)
179aed8d94eSDimitry Andric    { basic_ios<char_type, traits_type>::swap(__rhs); }
180d72607e9SDimitry Andric
18180779b37SDimitry Andric#ifndef _LIBCPP_CXX03_LANG
182d72607e9SDimitry Andric    basic_ostream           (const basic_ostream& __rhs) = delete;
183d72607e9SDimitry Andric    basic_ostream& operator=(const basic_ostream& __rhs) = delete;
184d72607e9SDimitry Andric#else
185d72607e9SDimitry Andric    basic_ostream           (const basic_ostream& __rhs); // not defined
186d72607e9SDimitry Andric    basic_ostream& operator=(const basic_ostream& __rhs); // not defined
187d72607e9SDimitry Andric#endif
1887a984708SDavid Chisnallpublic:
1897a984708SDavid Chisnall
1907a984708SDavid Chisnall    // 27.7.2.4 Prefix/suffix:
191aed8d94eSDimitry Andric    class _LIBCPP_TEMPLATE_VIS sentry;
1927a984708SDavid Chisnall
1937a984708SDavid Chisnall    // 27.7.2.6 Formatted output:
194*b5893f02SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
195aed8d94eSDimitry Andric    basic_ostream& operator<<(basic_ostream& (*__pf)(basic_ostream&))
196aed8d94eSDimitry Andric    { return __pf(*this); }
197aed8d94eSDimitry Andric
198*b5893f02SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
1997a984708SDavid Chisnall    basic_ostream& operator<<(basic_ios<char_type, traits_type>&
200aed8d94eSDimitry Andric                              (*__pf)(basic_ios<char_type,traits_type>&))
201aed8d94eSDimitry Andric    { __pf(*this); return *this; }
202aed8d94eSDimitry Andric
203*b5893f02SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
204aed8d94eSDimitry Andric    basic_ostream& operator<<(ios_base& (*__pf)(ios_base&))
205aed8d94eSDimitry Andric    { __pf(*this); return *this; }
206aed8d94eSDimitry Andric
2077a984708SDavid Chisnall    basic_ostream& operator<<(bool __n);
2087a984708SDavid Chisnall    basic_ostream& operator<<(short __n);
2097a984708SDavid Chisnall    basic_ostream& operator<<(unsigned short __n);
2107a984708SDavid Chisnall    basic_ostream& operator<<(int __n);
2117a984708SDavid Chisnall    basic_ostream& operator<<(unsigned int __n);
2127a984708SDavid Chisnall    basic_ostream& operator<<(long __n);
2137a984708SDavid Chisnall    basic_ostream& operator<<(unsigned long __n);
2147a984708SDavid Chisnall    basic_ostream& operator<<(long long __n);
2157a984708SDavid Chisnall    basic_ostream& operator<<(unsigned long long __n);
2167a984708SDavid Chisnall    basic_ostream& operator<<(float __f);
2177a984708SDavid Chisnall    basic_ostream& operator<<(double __f);
2187a984708SDavid Chisnall    basic_ostream& operator<<(long double __f);
2197a984708SDavid Chisnall    basic_ostream& operator<<(const void* __p);
2207a984708SDavid Chisnall    basic_ostream& operator<<(basic_streambuf<char_type, traits_type>* __sb);
2217a984708SDavid Chisnall
2227a984708SDavid Chisnall    // 27.7.2.7 Unformatted output:
2237a984708SDavid Chisnall    basic_ostream& put(char_type __c);
2247a984708SDavid Chisnall    basic_ostream& write(const char_type* __s, streamsize __n);
2257a984708SDavid Chisnall    basic_ostream& flush();
2267a984708SDavid Chisnall
2277a984708SDavid Chisnall    // 27.7.2.5 seeks:
228*b5893f02SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
2297a984708SDavid Chisnall    pos_type tellp();
230*b5893f02SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
2317a984708SDavid Chisnall    basic_ostream& seekp(pos_type __pos);
232*b5893f02SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
2337a984708SDavid Chisnall    basic_ostream& seekp(off_type __off, ios_base::seekdir __dir);
2347a984708SDavid Chisnall
2357a984708SDavid Chisnallprotected:
2364ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
2377a984708SDavid Chisnall    basic_ostream() {}  // extension, intentially does not initialize
2387a984708SDavid Chisnall};
2397a984708SDavid Chisnall
2407a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
241aed8d94eSDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_ostream<_CharT, _Traits>::sentry
2427a984708SDavid Chisnall{
2437a984708SDavid Chisnall    bool __ok_;
2447a984708SDavid Chisnall    basic_ostream<_CharT, _Traits>& __os_;
2457a984708SDavid Chisnall
2467a984708SDavid Chisnall    sentry(const sentry&); // = delete;
2477a984708SDavid Chisnall    sentry& operator=(const sentry&); // = delete;
2487a984708SDavid Chisnall
2497a984708SDavid Chisnallpublic:
2507a984708SDavid Chisnall    explicit sentry(basic_ostream<_CharT, _Traits>& __os);
2517a984708SDavid Chisnall    ~sentry();
2527a984708SDavid Chisnall
2534ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
25494e3ee44SDavid Chisnall        _LIBCPP_EXPLICIT
2557a984708SDavid Chisnall        operator bool() const {return __ok_;}
2567a984708SDavid Chisnall};
2577a984708SDavid Chisnall
2587a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
2597a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::sentry::sentry(basic_ostream<_CharT, _Traits>& __os)
2607a984708SDavid Chisnall    : __ok_(false),
2617a984708SDavid Chisnall      __os_(__os)
2627a984708SDavid Chisnall{
2637a984708SDavid Chisnall    if (__os.good())
2647a984708SDavid Chisnall    {
2657a984708SDavid Chisnall        if (__os.tie())
2667a984708SDavid Chisnall            __os.tie()->flush();
2677a984708SDavid Chisnall        __ok_ = true;
2687a984708SDavid Chisnall    }
2697a984708SDavid Chisnall}
2707a984708SDavid Chisnall
2717a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
2727a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::sentry::~sentry()
2737a984708SDavid Chisnall{
2747a984708SDavid Chisnall    if (__os_.rdbuf() && __os_.good() && (__os_.flags() & ios_base::unitbuf)
2757a984708SDavid Chisnall                      && !uncaught_exception())
2767a984708SDavid Chisnall    {
2777a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
2787a984708SDavid Chisnall        try
2797a984708SDavid Chisnall        {
2807a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
2817a984708SDavid Chisnall            if (__os_.rdbuf()->pubsync() == -1)
2827a984708SDavid Chisnall                __os_.setstate(ios_base::badbit);
2837a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
2847a984708SDavid Chisnall        }
2857a984708SDavid Chisnall        catch (...)
2867a984708SDavid Chisnall        {
2877a984708SDavid Chisnall        }
2887a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
2897a984708SDavid Chisnall    }
2907a984708SDavid Chisnall}
2917a984708SDavid Chisnall
292540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG
2937a984708SDavid Chisnall
2947a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
2957a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::basic_ostream(basic_ostream&& __rhs)
2967a984708SDavid Chisnall{
2977a984708SDavid Chisnall    this->move(__rhs);
2987a984708SDavid Chisnall}
2997a984708SDavid Chisnall
3007a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
3017a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
3027a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator=(basic_ostream&& __rhs)
3037a984708SDavid Chisnall{
3047a984708SDavid Chisnall    swap(__rhs);
3057a984708SDavid Chisnall    return *this;
3067a984708SDavid Chisnall}
3077a984708SDavid Chisnall
308540d2a8bSDimitry Andric#endif  // _LIBCPP_CXX03_LANG
3097a984708SDavid Chisnall
3107a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
3117a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::~basic_ostream()
3127a984708SDavid Chisnall{
3137a984708SDavid Chisnall}
3147a984708SDavid Chisnall
3157a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
3167a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
3177a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(basic_streambuf<char_type, traits_type>* __sb)
3187a984708SDavid Chisnall{
3197a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
3207a984708SDavid Chisnall    try
3217a984708SDavid Chisnall    {
3227a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
3237a984708SDavid Chisnall        sentry __s(*this);
3247a984708SDavid Chisnall        if (__s)
3257a984708SDavid Chisnall        {
3267a984708SDavid Chisnall            if (__sb)
3277a984708SDavid Chisnall            {
3287a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
3297a984708SDavid Chisnall                try
3307a984708SDavid Chisnall                {
3317a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
33294e3ee44SDavid Chisnall                    typedef istreambuf_iterator<_CharT, _Traits> _Ip;
33394e3ee44SDavid Chisnall                    typedef ostreambuf_iterator<_CharT, _Traits> _Op;
33494e3ee44SDavid Chisnall                    _Ip __i(__sb);
33594e3ee44SDavid Chisnall                    _Ip __eof;
33694e3ee44SDavid Chisnall                    _Op __o(*this);
3377a984708SDavid Chisnall                    size_t __c = 0;
3387a984708SDavid Chisnall                    for (; __i != __eof; ++__i, ++__o, ++__c)
3397a984708SDavid Chisnall                    {
3407a984708SDavid Chisnall                        *__o = *__i;
3417a984708SDavid Chisnall                        if (__o.failed())
3427a984708SDavid Chisnall                            break;
3437a984708SDavid Chisnall                    }
3447a984708SDavid Chisnall                    if (__c == 0)
3457a984708SDavid Chisnall                        this->setstate(ios_base::failbit);
3467a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
3477a984708SDavid Chisnall                }
3487a984708SDavid Chisnall                catch (...)
3497a984708SDavid Chisnall                {
3507a984708SDavid Chisnall                    this->__set_failbit_and_consider_rethrow();
3517a984708SDavid Chisnall                }
3527a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
3537a984708SDavid Chisnall            }
3547a984708SDavid Chisnall            else
3557a984708SDavid Chisnall                this->setstate(ios_base::badbit);
3567a984708SDavid Chisnall        }
3577a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
3587a984708SDavid Chisnall    }
3597a984708SDavid Chisnall    catch (...)
3607a984708SDavid Chisnall    {
3617a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
3627a984708SDavid Chisnall    }
3637a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
3647a984708SDavid Chisnall    return *this;
3657a984708SDavid Chisnall}
3667a984708SDavid Chisnall
3677a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
3687a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
3697a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(bool __n)
3707a984708SDavid Chisnall{
3717a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
3727a984708SDavid Chisnall    try
3737a984708SDavid Chisnall    {
3747a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
3757a984708SDavid Chisnall        sentry __s(*this);
3767a984708SDavid Chisnall        if (__s)
3777a984708SDavid Chisnall        {
37894e3ee44SDavid Chisnall            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
37994e3ee44SDavid Chisnall            const _Fp& __f = use_facet<_Fp>(this->getloc());
3807a984708SDavid Chisnall            if (__f.put(*this, *this, this->fill(), __n).failed())
3817a984708SDavid Chisnall                this->setstate(ios_base::badbit | ios_base::failbit);
3827a984708SDavid Chisnall        }
3837a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
3847a984708SDavid Chisnall    }
3857a984708SDavid Chisnall    catch (...)
3867a984708SDavid Chisnall    {
3877a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
3887a984708SDavid Chisnall    }
3897a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
3907a984708SDavid Chisnall    return *this;
3917a984708SDavid Chisnall}
3927a984708SDavid Chisnall
3937a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
3947a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
3957a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(short __n)
3967a984708SDavid Chisnall{
3977a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
3987a984708SDavid Chisnall    try
3997a984708SDavid Chisnall    {
4007a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
4017a984708SDavid Chisnall        sentry __s(*this);
4027a984708SDavid Chisnall        if (__s)
4037a984708SDavid Chisnall        {
4047a984708SDavid Chisnall            ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield;
40594e3ee44SDavid Chisnall            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
40694e3ee44SDavid Chisnall            const _Fp& __f = use_facet<_Fp>(this->getloc());
4077a984708SDavid Chisnall            if (__f.put(*this, *this, this->fill(),
4087a984708SDavid Chisnall                        __flags == ios_base::oct || __flags == ios_base::hex ?
4097a984708SDavid Chisnall                        static_cast<long>(static_cast<unsigned short>(__n))  :
4107a984708SDavid Chisnall                        static_cast<long>(__n)).failed())
4117a984708SDavid Chisnall                this->setstate(ios_base::badbit | ios_base::failbit);
4127a984708SDavid Chisnall        }
4137a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
4147a984708SDavid Chisnall    }
4157a984708SDavid Chisnall    catch (...)
4167a984708SDavid Chisnall    {
4177a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
4187a984708SDavid Chisnall    }
4197a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
4207a984708SDavid Chisnall    return *this;
4217a984708SDavid Chisnall}
4227a984708SDavid Chisnall
4237a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
4247a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
4257a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(unsigned short __n)
4267a984708SDavid Chisnall{
4277a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
4287a984708SDavid Chisnall    try
4297a984708SDavid Chisnall    {
4307a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
4317a984708SDavid Chisnall        sentry __s(*this);
4327a984708SDavid Chisnall        if (__s)
4337a984708SDavid Chisnall        {
43494e3ee44SDavid Chisnall            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
43594e3ee44SDavid Chisnall            const _Fp& __f = use_facet<_Fp>(this->getloc());
4367a984708SDavid Chisnall            if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(__n)).failed())
4377a984708SDavid Chisnall                this->setstate(ios_base::badbit | ios_base::failbit);
4387a984708SDavid Chisnall        }
4397a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
4407a984708SDavid Chisnall    }
4417a984708SDavid Chisnall    catch (...)
4427a984708SDavid Chisnall    {
4437a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
4447a984708SDavid Chisnall    }
4457a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
4467a984708SDavid Chisnall    return *this;
4477a984708SDavid Chisnall}
4487a984708SDavid Chisnall
4497a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
4507a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
4517a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(int __n)
4527a984708SDavid Chisnall{
4537a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
4547a984708SDavid Chisnall    try
4557a984708SDavid Chisnall    {
4567a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
4577a984708SDavid Chisnall        sentry __s(*this);
4587a984708SDavid Chisnall        if (__s)
4597a984708SDavid Chisnall        {
4607a984708SDavid Chisnall            ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield;
46194e3ee44SDavid Chisnall            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
46294e3ee44SDavid Chisnall            const _Fp& __f = use_facet<_Fp>(this->getloc());
4637a984708SDavid Chisnall            if (__f.put(*this, *this, this->fill(),
4647a984708SDavid Chisnall                        __flags == ios_base::oct || __flags == ios_base::hex ?
4657a984708SDavid Chisnall                        static_cast<long>(static_cast<unsigned int>(__n))  :
4667a984708SDavid Chisnall                        static_cast<long>(__n)).failed())
4677a984708SDavid Chisnall                this->setstate(ios_base::badbit | ios_base::failbit);
4687a984708SDavid Chisnall        }
4697a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
4707a984708SDavid Chisnall    }
4717a984708SDavid Chisnall    catch (...)
4727a984708SDavid Chisnall    {
4737a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
4747a984708SDavid Chisnall    }
4757a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
4767a984708SDavid Chisnall    return *this;
4777a984708SDavid Chisnall}
4787a984708SDavid Chisnall
4797a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
4807a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
4817a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(unsigned int __n)
4827a984708SDavid Chisnall{
4837a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
4847a984708SDavid Chisnall    try
4857a984708SDavid Chisnall    {
4867a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
4877a984708SDavid Chisnall        sentry __s(*this);
4887a984708SDavid Chisnall        if (__s)
4897a984708SDavid Chisnall        {
49094e3ee44SDavid Chisnall            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
49194e3ee44SDavid Chisnall            const _Fp& __f = use_facet<_Fp>(this->getloc());
4927a984708SDavid Chisnall            if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(__n)).failed())
4937a984708SDavid Chisnall                this->setstate(ios_base::badbit | ios_base::failbit);
4947a984708SDavid Chisnall        }
4957a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
4967a984708SDavid Chisnall    }
4977a984708SDavid Chisnall    catch (...)
4987a984708SDavid Chisnall    {
4997a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
5007a984708SDavid Chisnall    }
5017a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
5027a984708SDavid Chisnall    return *this;
5037a984708SDavid Chisnall}
5047a984708SDavid Chisnall
5057a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
5067a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
5077a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(long __n)
5087a984708SDavid Chisnall{
5097a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
5107a984708SDavid Chisnall    try
5117a984708SDavid Chisnall    {
5127a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
5137a984708SDavid Chisnall        sentry __s(*this);
5147a984708SDavid Chisnall        if (__s)
5157a984708SDavid Chisnall        {
51694e3ee44SDavid Chisnall            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
51794e3ee44SDavid Chisnall            const _Fp& __f = use_facet<_Fp>(this->getloc());
5187a984708SDavid Chisnall            if (__f.put(*this, *this, this->fill(), __n).failed())
5197a984708SDavid Chisnall                this->setstate(ios_base::badbit | ios_base::failbit);
5207a984708SDavid Chisnall        }
5217a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
5227a984708SDavid Chisnall    }
5237a984708SDavid Chisnall    catch (...)
5247a984708SDavid Chisnall    {
5257a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
5267a984708SDavid Chisnall    }
5277a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
5287a984708SDavid Chisnall    return *this;
5297a984708SDavid Chisnall}
5307a984708SDavid Chisnall
5317a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
5327a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
5337a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(unsigned long __n)
5347a984708SDavid Chisnall{
5357a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
5367a984708SDavid Chisnall    try
5377a984708SDavid Chisnall    {
5387a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
5397a984708SDavid Chisnall        sentry __s(*this);
5407a984708SDavid Chisnall        if (__s)
5417a984708SDavid Chisnall        {
54294e3ee44SDavid Chisnall            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
54394e3ee44SDavid Chisnall            const _Fp& __f = use_facet<_Fp>(this->getloc());
5447a984708SDavid Chisnall            if (__f.put(*this, *this, this->fill(), __n).failed())
5457a984708SDavid Chisnall                this->setstate(ios_base::badbit | ios_base::failbit);
5467a984708SDavid Chisnall        }
5477a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
5487a984708SDavid Chisnall    }
5497a984708SDavid Chisnall    catch (...)
5507a984708SDavid Chisnall    {
5517a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
5527a984708SDavid Chisnall    }
5537a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
5547a984708SDavid Chisnall    return *this;
5557a984708SDavid Chisnall}
5567a984708SDavid Chisnall
5577a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
5587a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
5597a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(long long __n)
5607a984708SDavid Chisnall{
5617a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
5627a984708SDavid Chisnall    try
5637a984708SDavid Chisnall    {
5647a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
5657a984708SDavid Chisnall        sentry __s(*this);
5667a984708SDavid Chisnall        if (__s)
5677a984708SDavid Chisnall        {
56894e3ee44SDavid Chisnall            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
56994e3ee44SDavid Chisnall            const _Fp& __f = use_facet<_Fp>(this->getloc());
5707a984708SDavid Chisnall            if (__f.put(*this, *this, this->fill(), __n).failed())
5717a984708SDavid Chisnall                this->setstate(ios_base::badbit | ios_base::failbit);
5727a984708SDavid Chisnall        }
5737a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
5747a984708SDavid Chisnall    }
5757a984708SDavid Chisnall    catch (...)
5767a984708SDavid Chisnall    {
5777a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
5787a984708SDavid Chisnall    }
5797a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
5807a984708SDavid Chisnall    return *this;
5817a984708SDavid Chisnall}
5827a984708SDavid Chisnall
5837a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
5847a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
5857a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(unsigned long long __n)
5867a984708SDavid Chisnall{
5877a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
5887a984708SDavid Chisnall    try
5897a984708SDavid Chisnall    {
5907a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
5917a984708SDavid Chisnall        sentry __s(*this);
5927a984708SDavid Chisnall        if (__s)
5937a984708SDavid Chisnall        {
59494e3ee44SDavid Chisnall            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
59594e3ee44SDavid Chisnall            const _Fp& __f = use_facet<_Fp>(this->getloc());
5967a984708SDavid Chisnall            if (__f.put(*this, *this, this->fill(), __n).failed())
5977a984708SDavid Chisnall                this->setstate(ios_base::badbit | ios_base::failbit);
5987a984708SDavid Chisnall        }
5997a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
6007a984708SDavid Chisnall    }
6017a984708SDavid Chisnall    catch (...)
6027a984708SDavid Chisnall    {
6037a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
6047a984708SDavid Chisnall    }
6057a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
6067a984708SDavid Chisnall    return *this;
6077a984708SDavid Chisnall}
6087a984708SDavid Chisnall
6097a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
6107a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
6117a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(float __n)
6127a984708SDavid Chisnall{
6137a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
6147a984708SDavid Chisnall    try
6157a984708SDavid Chisnall    {
6167a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
6177a984708SDavid Chisnall        sentry __s(*this);
6187a984708SDavid Chisnall        if (__s)
6197a984708SDavid Chisnall        {
62094e3ee44SDavid Chisnall            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
62194e3ee44SDavid Chisnall            const _Fp& __f = use_facet<_Fp>(this->getloc());
6227a984708SDavid Chisnall            if (__f.put(*this, *this, this->fill(), static_cast<double>(__n)).failed())
6237a984708SDavid Chisnall                this->setstate(ios_base::badbit | ios_base::failbit);
6247a984708SDavid Chisnall        }
6257a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
6267a984708SDavid Chisnall    }
6277a984708SDavid Chisnall    catch (...)
6287a984708SDavid Chisnall    {
6297a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
6307a984708SDavid Chisnall    }
6317a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
6327a984708SDavid Chisnall    return *this;
6337a984708SDavid Chisnall}
6347a984708SDavid Chisnall
6357a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
6367a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
6377a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(double __n)
6387a984708SDavid Chisnall{
6397a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
6407a984708SDavid Chisnall    try
6417a984708SDavid Chisnall    {
6427a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
6437a984708SDavid Chisnall        sentry __s(*this);
6447a984708SDavid Chisnall        if (__s)
6457a984708SDavid Chisnall        {
64694e3ee44SDavid Chisnall            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
64794e3ee44SDavid Chisnall            const _Fp& __f = use_facet<_Fp>(this->getloc());
6487a984708SDavid Chisnall            if (__f.put(*this, *this, this->fill(), __n).failed())
6497a984708SDavid Chisnall                this->setstate(ios_base::badbit | ios_base::failbit);
6507a984708SDavid Chisnall        }
6517a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
6527a984708SDavid Chisnall    }
6537a984708SDavid Chisnall    catch (...)
6547a984708SDavid Chisnall    {
6557a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
6567a984708SDavid Chisnall    }
6577a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
6587a984708SDavid Chisnall    return *this;
6597a984708SDavid Chisnall}
6607a984708SDavid Chisnall
6617a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
6627a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
6637a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(long double __n)
6647a984708SDavid Chisnall{
6657a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
6667a984708SDavid Chisnall    try
6677a984708SDavid Chisnall    {
6687a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
6697a984708SDavid Chisnall        sentry __s(*this);
6707a984708SDavid Chisnall        if (__s)
6717a984708SDavid Chisnall        {
67294e3ee44SDavid Chisnall            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
67394e3ee44SDavid Chisnall            const _Fp& __f = use_facet<_Fp>(this->getloc());
6747a984708SDavid Chisnall            if (__f.put(*this, *this, this->fill(), __n).failed())
6757a984708SDavid Chisnall                this->setstate(ios_base::badbit | ios_base::failbit);
6767a984708SDavid Chisnall        }
6777a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
6787a984708SDavid Chisnall    }
6797a984708SDavid Chisnall    catch (...)
6807a984708SDavid Chisnall    {
6817a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
6827a984708SDavid Chisnall    }
6837a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
6847a984708SDavid Chisnall    return *this;
6857a984708SDavid Chisnall}
6867a984708SDavid Chisnall
6877a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
6887a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
6897a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::operator<<(const void* __n)
6907a984708SDavid Chisnall{
6917a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
6927a984708SDavid Chisnall    try
6937a984708SDavid Chisnall    {
6947a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
6957a984708SDavid Chisnall        sentry __s(*this);
6967a984708SDavid Chisnall        if (__s)
6977a984708SDavid Chisnall        {
69894e3ee44SDavid Chisnall            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
69994e3ee44SDavid Chisnall            const _Fp& __f = use_facet<_Fp>(this->getloc());
7007a984708SDavid Chisnall            if (__f.put(*this, *this, this->fill(), __n).failed())
7017a984708SDavid Chisnall                this->setstate(ios_base::badbit | ios_base::failbit);
7027a984708SDavid Chisnall        }
7037a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
7047a984708SDavid Chisnall    }
7057a984708SDavid Chisnall    catch (...)
7067a984708SDavid Chisnall    {
7077a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
7087a984708SDavid Chisnall    }
7097a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
7107a984708SDavid Chisnall    return *this;
7117a984708SDavid Chisnall}
7127a984708SDavid Chisnall
7137a984708SDavid Chisnalltemplate<class _CharT, class _Traits>
7147a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
715d72607e9SDimitry Andric__put_character_sequence(basic_ostream<_CharT, _Traits>& __os,
716d72607e9SDimitry Andric                          const _CharT* __str, size_t __len)
7177a984708SDavid Chisnall{
7187a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
7197a984708SDavid Chisnall    try
7207a984708SDavid Chisnall    {
7217a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
7227a984708SDavid Chisnall        typename basic_ostream<_CharT, _Traits>::sentry __s(__os);
7237a984708SDavid Chisnall        if (__s)
7247a984708SDavid Chisnall        {
72594e3ee44SDavid Chisnall            typedef ostreambuf_iterator<_CharT, _Traits> _Ip;
72694e3ee44SDavid Chisnall            if (__pad_and_output(_Ip(__os),
727d72607e9SDimitry Andric                                 __str,
7287a984708SDavid Chisnall                                 (__os.flags() & ios_base::adjustfield) == ios_base::left ?
729d72607e9SDimitry Andric                                     __str + __len :
730d72607e9SDimitry Andric                                     __str,
731d72607e9SDimitry Andric                                 __str + __len,
7327a984708SDavid Chisnall                                 __os,
7337a984708SDavid Chisnall                                 __os.fill()).failed())
7347a984708SDavid Chisnall                __os.setstate(ios_base::badbit | ios_base::failbit);
7357a984708SDavid Chisnall        }
7367a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
7377a984708SDavid Chisnall    }
7387a984708SDavid Chisnall    catch (...)
7397a984708SDavid Chisnall    {
7407a984708SDavid Chisnall        __os.__set_badbit_and_consider_rethrow();
7417a984708SDavid Chisnall    }
7427a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
7437a984708SDavid Chisnall    return __os;
7447a984708SDavid Chisnall}
7457a984708SDavid Chisnall
746d72607e9SDimitry Andric
747d72607e9SDimitry Andrictemplate<class _CharT, class _Traits>
748d72607e9SDimitry Andricbasic_ostream<_CharT, _Traits>&
749d72607e9SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, _CharT __c)
750d72607e9SDimitry Andric{
751d72607e9SDimitry Andric    return _VSTD::__put_character_sequence(__os, &__c, 1);
752d72607e9SDimitry Andric}
753d72607e9SDimitry Andric
7547a984708SDavid Chisnalltemplate<class _CharT, class _Traits>
7557a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
7567a984708SDavid Chisnalloperator<<(basic_ostream<_CharT, _Traits>& __os, char __cn)
7577a984708SDavid Chisnall{
7587a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
7597a984708SDavid Chisnall    try
7607a984708SDavid Chisnall    {
7617a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
7627a984708SDavid Chisnall        typename basic_ostream<_CharT, _Traits>::sentry __s(__os);
7637a984708SDavid Chisnall        if (__s)
7647a984708SDavid Chisnall        {
7657a984708SDavid Chisnall            _CharT __c = __os.widen(__cn);
76694e3ee44SDavid Chisnall            typedef ostreambuf_iterator<_CharT, _Traits> _Ip;
76794e3ee44SDavid Chisnall            if (__pad_and_output(_Ip(__os),
7687a984708SDavid Chisnall                                 &__c,
7697a984708SDavid Chisnall                                 (__os.flags() & ios_base::adjustfield) == ios_base::left ?
7707a984708SDavid Chisnall                                     &__c + 1 :
7717a984708SDavid Chisnall                                     &__c,
7727a984708SDavid Chisnall                                 &__c + 1,
7737a984708SDavid Chisnall                                 __os,
7747a984708SDavid Chisnall                                 __os.fill()).failed())
7757a984708SDavid Chisnall                __os.setstate(ios_base::badbit | ios_base::failbit);
7767a984708SDavid Chisnall        }
7777a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
7787a984708SDavid Chisnall    }
7797a984708SDavid Chisnall    catch (...)
7807a984708SDavid Chisnall    {
7817a984708SDavid Chisnall        __os.__set_badbit_and_consider_rethrow();
7827a984708SDavid Chisnall    }
7837a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
7847a984708SDavid Chisnall    return __os;
7857a984708SDavid Chisnall}
7867a984708SDavid Chisnall
7877a984708SDavid Chisnalltemplate<class _Traits>
7887a984708SDavid Chisnallbasic_ostream<char, _Traits>&
7897a984708SDavid Chisnalloperator<<(basic_ostream<char, _Traits>& __os, char __c)
7907a984708SDavid Chisnall{
791d72607e9SDimitry Andric    return _VSTD::__put_character_sequence(__os, &__c, 1);
7927a984708SDavid Chisnall}
7937a984708SDavid Chisnall
7947a984708SDavid Chisnalltemplate<class _Traits>
7957a984708SDavid Chisnallbasic_ostream<char, _Traits>&
7967a984708SDavid Chisnalloperator<<(basic_ostream<char, _Traits>& __os, signed char __c)
7977a984708SDavid Chisnall{
798d72607e9SDimitry Andric    return _VSTD::__put_character_sequence(__os, (char *) &__c, 1);
7997a984708SDavid Chisnall}
8007a984708SDavid Chisnall
8017a984708SDavid Chisnalltemplate<class _Traits>
8027a984708SDavid Chisnallbasic_ostream<char, _Traits>&
8037a984708SDavid Chisnalloperator<<(basic_ostream<char, _Traits>& __os, unsigned char __c)
8047a984708SDavid Chisnall{
805d72607e9SDimitry Andric    return _VSTD::__put_character_sequence(__os, (char *) &__c, 1);
8067a984708SDavid Chisnall}
8077a984708SDavid Chisnall
8087a984708SDavid Chisnalltemplate<class _CharT, class _Traits>
8097a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
8107a984708SDavid Chisnalloperator<<(basic_ostream<_CharT, _Traits>& __os, const _CharT* __str)
8117a984708SDavid Chisnall{
812d72607e9SDimitry Andric    return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str));
8137a984708SDavid Chisnall}
8147a984708SDavid Chisnall
8157a984708SDavid Chisnalltemplate<class _CharT, class _Traits>
8167a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
8177a984708SDavid Chisnalloperator<<(basic_ostream<_CharT, _Traits>& __os, const char* __strn)
8187a984708SDavid Chisnall{
8197a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
8207a984708SDavid Chisnall    try
8217a984708SDavid Chisnall    {
8227a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
8237a984708SDavid Chisnall        typename basic_ostream<_CharT, _Traits>::sentry __s(__os);
8247a984708SDavid Chisnall        if (__s)
8257a984708SDavid Chisnall        {
82694e3ee44SDavid Chisnall            typedef ostreambuf_iterator<_CharT, _Traits> _Ip;
8277a984708SDavid Chisnall            size_t __len = char_traits<char>::length(__strn);
8287a984708SDavid Chisnall            const int __bs = 100;
8297a984708SDavid Chisnall            _CharT __wbb[__bs];
8307a984708SDavid Chisnall            _CharT* __wb = __wbb;
8317a984708SDavid Chisnall            unique_ptr<_CharT, void(*)(void*)> __h(0, free);
8327a984708SDavid Chisnall            if (__len > __bs)
8337a984708SDavid Chisnall            {
8347a984708SDavid Chisnall                __wb = (_CharT*)malloc(__len*sizeof(_CharT));
8357a984708SDavid Chisnall                if (__wb == 0)
8367a984708SDavid Chisnall                    __throw_bad_alloc();
8377a984708SDavid Chisnall                __h.reset(__wb);
8387a984708SDavid Chisnall            }
8397a984708SDavid Chisnall            for (_CharT* __p = __wb; *__strn != '\0'; ++__strn, ++__p)
8407a984708SDavid Chisnall                *__p = __os.widen(*__strn);
84194e3ee44SDavid Chisnall            if (__pad_and_output(_Ip(__os),
8427a984708SDavid Chisnall                                 __wb,
8437a984708SDavid Chisnall                                 (__os.flags() & ios_base::adjustfield) == ios_base::left ?
8447a984708SDavid Chisnall                                     __wb + __len :
8457a984708SDavid Chisnall                                     __wb,
8467a984708SDavid Chisnall                                 __wb + __len,
8477a984708SDavid Chisnall                                 __os,
8487a984708SDavid Chisnall                                 __os.fill()).failed())
8497a984708SDavid Chisnall                __os.setstate(ios_base::badbit | ios_base::failbit);
8507a984708SDavid Chisnall        }
8517a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
8527a984708SDavid Chisnall    }
8537a984708SDavid Chisnall    catch (...)
8547a984708SDavid Chisnall    {
8557a984708SDavid Chisnall        __os.__set_badbit_and_consider_rethrow();
8567a984708SDavid Chisnall    }
8577a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
8587a984708SDavid Chisnall    return __os;
8597a984708SDavid Chisnall}
8607a984708SDavid Chisnall
8617a984708SDavid Chisnalltemplate<class _Traits>
8627a984708SDavid Chisnallbasic_ostream<char, _Traits>&
8637a984708SDavid Chisnalloperator<<(basic_ostream<char, _Traits>& __os, const char* __str)
8647a984708SDavid Chisnall{
865d72607e9SDimitry Andric    return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str));
8667a984708SDavid Chisnall}
8677a984708SDavid Chisnall
8687a984708SDavid Chisnalltemplate<class _Traits>
8697a984708SDavid Chisnallbasic_ostream<char, _Traits>&
8707a984708SDavid Chisnalloperator<<(basic_ostream<char, _Traits>& __os, const signed char* __str)
8717a984708SDavid Chisnall{
872d72607e9SDimitry Andric    const char *__s = (const char *) __str;
873d72607e9SDimitry Andric    return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s));
8747a984708SDavid Chisnall}
8757a984708SDavid Chisnall
8767a984708SDavid Chisnalltemplate<class _Traits>
8777a984708SDavid Chisnallbasic_ostream<char, _Traits>&
8787a984708SDavid Chisnalloperator<<(basic_ostream<char, _Traits>& __os, const unsigned char* __str)
8797a984708SDavid Chisnall{
880d72607e9SDimitry Andric    const char *__s = (const char *) __str;
881d72607e9SDimitry Andric    return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s));
8827a984708SDavid Chisnall}
8837a984708SDavid Chisnall
8847a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
8857a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
8867a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::put(char_type __c)
8877a984708SDavid Chisnall{
8887a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
8897a984708SDavid Chisnall    try
8907a984708SDavid Chisnall    {
8917a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
8927a984708SDavid Chisnall        sentry __s(*this);
8937a984708SDavid Chisnall        if (__s)
8947a984708SDavid Chisnall        {
89594e3ee44SDavid Chisnall            typedef ostreambuf_iterator<_CharT, _Traits> _Op;
89694e3ee44SDavid Chisnall            _Op __o(*this);
8977a984708SDavid Chisnall            *__o = __c;
8987a984708SDavid Chisnall            if (__o.failed())
8997a984708SDavid Chisnall                this->setstate(ios_base::badbit);
9007a984708SDavid Chisnall        }
9017a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
9027a984708SDavid Chisnall    }
9037a984708SDavid Chisnall    catch (...)
9047a984708SDavid Chisnall    {
9057a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
9067a984708SDavid Chisnall    }
9077a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
9087a984708SDavid Chisnall    return *this;
9097a984708SDavid Chisnall}
9107a984708SDavid Chisnall
9117a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
9127a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
9137a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::write(const char_type* __s, streamsize __n)
9147a984708SDavid Chisnall{
9157a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
9167a984708SDavid Chisnall    try
9177a984708SDavid Chisnall    {
9187a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
9197a984708SDavid Chisnall        sentry __sen(*this);
9207a984708SDavid Chisnall        if (__sen && __n)
9217a984708SDavid Chisnall        {
922cfdf2879SDavid Chisnall            if (this->rdbuf()->sputn(__s, __n) != __n)
9237a984708SDavid Chisnall                this->setstate(ios_base::badbit);
9247a984708SDavid Chisnall        }
9257a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
9267a984708SDavid Chisnall    }
9277a984708SDavid Chisnall    catch (...)
9287a984708SDavid Chisnall    {
9297a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
9307a984708SDavid Chisnall    }
9317a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
9327a984708SDavid Chisnall    return *this;
9337a984708SDavid Chisnall}
9347a984708SDavid Chisnall
9357a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
9367a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
9377a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::flush()
9387a984708SDavid Chisnall{
9397a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
9407a984708SDavid Chisnall    try
9417a984708SDavid Chisnall    {
9427a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
9437a984708SDavid Chisnall        if (this->rdbuf())
9447a984708SDavid Chisnall        {
9457a984708SDavid Chisnall            sentry __s(*this);
9467a984708SDavid Chisnall            if (__s)
9477a984708SDavid Chisnall            {
9487a984708SDavid Chisnall                if (this->rdbuf()->pubsync() == -1)
9497a984708SDavid Chisnall                    this->setstate(ios_base::badbit);
9507a984708SDavid Chisnall            }
9517a984708SDavid Chisnall        }
9527a984708SDavid Chisnall#ifndef _LIBCPP_NO_EXCEPTIONS
9537a984708SDavid Chisnall    }
9547a984708SDavid Chisnall    catch (...)
9557a984708SDavid Chisnall    {
9567a984708SDavid Chisnall        this->__set_badbit_and_consider_rethrow();
9577a984708SDavid Chisnall    }
9587a984708SDavid Chisnall#endif  // _LIBCPP_NO_EXCEPTIONS
9597a984708SDavid Chisnall    return *this;
9607a984708SDavid Chisnall}
9617a984708SDavid Chisnall
9627a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
9637a984708SDavid Chisnalltypename basic_ostream<_CharT, _Traits>::pos_type
9647a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::tellp()
9657a984708SDavid Chisnall{
9667a984708SDavid Chisnall    if (this->fail())
9677a984708SDavid Chisnall        return pos_type(-1);
9687a984708SDavid Chisnall    return this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out);
9697a984708SDavid Chisnall}
9707a984708SDavid Chisnall
9717a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
9727a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
9737a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::seekp(pos_type __pos)
9747a984708SDavid Chisnall{
9754f7ab58eSDimitry Andric    sentry __s(*this);
976854fa44bSDimitry Andric    if (!this->fail())
9777a984708SDavid Chisnall    {
9787a984708SDavid Chisnall        if (this->rdbuf()->pubseekpos(__pos, ios_base::out) == pos_type(-1))
9797a984708SDavid Chisnall            this->setstate(ios_base::failbit);
9807a984708SDavid Chisnall    }
9817a984708SDavid Chisnall    return *this;
9827a984708SDavid Chisnall}
9837a984708SDavid Chisnall
9847a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
9857a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
9867a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>::seekp(off_type __off, ios_base::seekdir __dir)
9877a984708SDavid Chisnall{
9884f7ab58eSDimitry Andric    sentry __s(*this);
989854fa44bSDimitry Andric    if (!this->fail())
9904f7ab58eSDimitry Andric    {
9914f7ab58eSDimitry Andric        if (this->rdbuf()->pubseekoff(__off, __dir, ios_base::out) == pos_type(-1))
9924f7ab58eSDimitry Andric            this->setstate(ios_base::failbit);
9934f7ab58eSDimitry Andric    }
9947a984708SDavid Chisnall    return *this;
9957a984708SDavid Chisnall}
9967a984708SDavid Chisnall
9977a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
9987a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY
9997a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
10007a984708SDavid Chisnallendl(basic_ostream<_CharT, _Traits>& __os)
10017a984708SDavid Chisnall{
10027a984708SDavid Chisnall    __os.put(__os.widen('\n'));
10037a984708SDavid Chisnall    __os.flush();
10047a984708SDavid Chisnall    return __os;
10057a984708SDavid Chisnall}
10067a984708SDavid Chisnall
10077a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
10087a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY
10097a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
10107a984708SDavid Chisnallends(basic_ostream<_CharT, _Traits>& __os)
10117a984708SDavid Chisnall{
10127a984708SDavid Chisnall    __os.put(_CharT());
10137a984708SDavid Chisnall    return __os;
10147a984708SDavid Chisnall}
10157a984708SDavid Chisnall
10167a984708SDavid Chisnalltemplate <class _CharT, class _Traits>
10177a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY
10187a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
10197a984708SDavid Chisnallflush(basic_ostream<_CharT, _Traits>& __os)
10207a984708SDavid Chisnall{
10217a984708SDavid Chisnall    __os.flush();
10227a984708SDavid Chisnall    return __os;
10237a984708SDavid Chisnall}
10247a984708SDavid Chisnall
1025540d2a8bSDimitry Andric#ifndef _LIBCPP_CXX03_LANG
10267a984708SDavid Chisnall
10277a984708SDavid Chisnalltemplate <class _Stream, class _Tp>
10287a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY
10297a984708SDavid Chisnalltypename enable_if
10307a984708SDavid Chisnall<
10317a984708SDavid Chisnall    !is_lvalue_reference<_Stream>::value &&
10327a984708SDavid Chisnall    is_base_of<ios_base, _Stream>::value,
103394e3ee44SDavid Chisnall    _Stream&&
10347a984708SDavid Chisnall>::type
10357a984708SDavid Chisnalloperator<<(_Stream&& __os, const _Tp& __x)
10367a984708SDavid Chisnall{
10377a984708SDavid Chisnall    __os << __x;
103894e3ee44SDavid Chisnall    return _VSTD::move(__os);
10397a984708SDavid Chisnall}
10407a984708SDavid Chisnall
1041540d2a8bSDimitry Andric#endif  // _LIBCPP_CXX03_LANG
10427a984708SDavid Chisnall
10437a984708SDavid Chisnalltemplate<class _CharT, class _Traits, class _Allocator>
10447a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
10457a984708SDavid Chisnalloperator<<(basic_ostream<_CharT, _Traits>& __os,
10467a984708SDavid Chisnall           const basic_string<_CharT, _Traits, _Allocator>& __str)
10477a984708SDavid Chisnall{
1048d72607e9SDimitry Andric    return _VSTD::__put_character_sequence(__os, __str.data(), __str.size());
10497a984708SDavid Chisnall}
10507a984708SDavid Chisnall
10517a984708SDavid Chisnalltemplate<class _CharT, class _Traits>
1052aed8d94eSDimitry Andricbasic_ostream<_CharT, _Traits>&
1053aed8d94eSDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os,
1054aed8d94eSDimitry Andric           const basic_string_view<_CharT, _Traits> __sv)
1055aed8d94eSDimitry Andric{
1056aed8d94eSDimitry Andric    return _VSTD::__put_character_sequence(__os, __sv.data(), __sv.size());
1057aed8d94eSDimitry Andric}
1058aed8d94eSDimitry Andric
1059aed8d94eSDimitry Andrictemplate <class _CharT, class _Traits>
10607a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY
10617a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
10627a984708SDavid Chisnalloperator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __ec)
10637a984708SDavid Chisnall{
10647a984708SDavid Chisnall    return __os << __ec.category().name() << ':' << __ec.value();
10657a984708SDavid Chisnall}
10667a984708SDavid Chisnall
106794e3ee44SDavid Chisnalltemplate<class _CharT, class _Traits, class _Yp>
10687a984708SDavid Chisnallinline _LIBCPP_INLINE_VISIBILITY
10697a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
107094e3ee44SDavid Chisnalloperator<<(basic_ostream<_CharT, _Traits>& __os, shared_ptr<_Yp> const& __p)
10717a984708SDavid Chisnall{
10727a984708SDavid Chisnall    return __os << __p.get();
10737a984708SDavid Chisnall}
10747a984708SDavid Chisnall
1075b2c7081bSDimitry Andrictemplate<class _CharT, class _Traits, class _Yp, class _Dp>
1076b2c7081bSDimitry Andricinline _LIBCPP_INLINE_VISIBILITY
1077b2c7081bSDimitry Andrictypename enable_if
1078b2c7081bSDimitry Andric<
10794ba319b5SDimitry Andric    is_same<void, typename __void_t<decltype((declval<basic_ostream<_CharT, _Traits>&>() << declval<typename unique_ptr<_Yp, _Dp>::pointer>()))>::type>::value,
1080b2c7081bSDimitry Andric    basic_ostream<_CharT, _Traits>&
1081b2c7081bSDimitry Andric>::type
1082b2c7081bSDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, unique_ptr<_Yp, _Dp> const& __p)
1083b2c7081bSDimitry Andric{
1084b2c7081bSDimitry Andric    return __os << __p.get();
1085b2c7081bSDimitry Andric}
1086b2c7081bSDimitry Andric
10877a984708SDavid Chisnalltemplate <class _CharT, class _Traits, size_t _Size>
10887a984708SDavid Chisnallbasic_ostream<_CharT, _Traits>&
10897a984708SDavid Chisnalloperator<<(basic_ostream<_CharT, _Traits>& __os, const bitset<_Size>& __x)
10907a984708SDavid Chisnall{
10917a984708SDavid Chisnall    return __os << __x.template to_string<_CharT, _Traits>
10927a984708SDavid Chisnall                        (use_facet<ctype<_CharT> >(__os.getloc()).widen('0'),
10937a984708SDavid Chisnall                         use_facet<ctype<_CharT> >(__os.getloc()).widen('1'));
10947a984708SDavid Chisnall}
10957a984708SDavid Chisnall
1096*b5893f02SDimitry Andric#ifndef _LIBCPP_DO_NOT_ASSUME_STREAMS_EXPLICIT_INSTANTIATION_IN_DYLIB
1097aed8d94eSDimitry Andric_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<char>)
1098aed8d94eSDimitry Andric_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<wchar_t>)
10990f5676f4SDimitry Andric#endif
11007a984708SDavid Chisnall
11017a984708SDavid Chisnall_LIBCPP_END_NAMESPACE_STD
11027a984708SDavid Chisnall
11037a984708SDavid Chisnall#endif  // _LIBCPP_OSTREAM
1104