xref: /freebsd/contrib/llvm-project/libcxx/include/ostream (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
10b57cec5SDimitry Andric// -*- C++ -*-
2349cc55cSDimitry Andric//===----------------------------------------------------------------------===//
30b57cec5SDimitry Andric//
40b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
50b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
60b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
70b57cec5SDimitry Andric//
80b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
90b57cec5SDimitry Andric
100b57cec5SDimitry Andric#ifndef _LIBCPP_OSTREAM
110b57cec5SDimitry Andric#define _LIBCPP_OSTREAM
120b57cec5SDimitry Andric
130b57cec5SDimitry Andric/*
140b57cec5SDimitry Andric    ostream synopsis
150b57cec5SDimitry Andric
160b57cec5SDimitry Andrictemplate <class charT, class traits = char_traits<charT> >
170b57cec5SDimitry Andricclass basic_ostream
180b57cec5SDimitry Andric    : virtual public basic_ios<charT,traits>
190b57cec5SDimitry Andric{
200b57cec5SDimitry Andricpublic:
210b57cec5SDimitry Andric    // types (inherited from basic_ios (27.5.4)):
220b57cec5SDimitry Andric    typedef charT                          char_type;
230b57cec5SDimitry Andric    typedef traits                         traits_type;
240b57cec5SDimitry Andric    typedef typename traits_type::int_type int_type;
250b57cec5SDimitry Andric    typedef typename traits_type::pos_type pos_type;
260b57cec5SDimitry Andric    typedef typename traits_type::off_type off_type;
270b57cec5SDimitry Andric
280b57cec5SDimitry Andric    // 27.7.2.2 Constructor/destructor:
290b57cec5SDimitry Andric    explicit basic_ostream(basic_streambuf<char_type,traits>* sb);
300b57cec5SDimitry Andric    basic_ostream(basic_ostream&& rhs);
310b57cec5SDimitry Andric    virtual ~basic_ostream();
320b57cec5SDimitry Andric
330b57cec5SDimitry Andric    // 27.7.2.3 Assign/swap
340b57cec5SDimitry Andric    basic_ostream& operator=(const basic_ostream& rhs) = delete; // C++14
350b57cec5SDimitry Andric    basic_ostream& operator=(basic_ostream&& rhs);
360b57cec5SDimitry Andric    void swap(basic_ostream& rhs);
370b57cec5SDimitry Andric
380b57cec5SDimitry Andric    // 27.7.2.4 Prefix/suffix:
390b57cec5SDimitry Andric    class sentry;
400b57cec5SDimitry Andric
410b57cec5SDimitry Andric    // 27.7.2.6 Formatted output:
420b57cec5SDimitry Andric    basic_ostream& operator<<(basic_ostream& (*pf)(basic_ostream&));
430b57cec5SDimitry Andric    basic_ostream& operator<<(basic_ios<charT, traits>& (*pf)(basic_ios<charT,traits>&));
440b57cec5SDimitry Andric    basic_ostream& operator<<(ios_base& (*pf)(ios_base&));
450b57cec5SDimitry Andric    basic_ostream& operator<<(bool n);
460b57cec5SDimitry Andric    basic_ostream& operator<<(short n);
470b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned short n);
480b57cec5SDimitry Andric    basic_ostream& operator<<(int n);
490b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned int n);
500b57cec5SDimitry Andric    basic_ostream& operator<<(long n);
510b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned long n);
520b57cec5SDimitry Andric    basic_ostream& operator<<(long long n);
530b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned long long n);
540b57cec5SDimitry Andric    basic_ostream& operator<<(float f);
550b57cec5SDimitry Andric    basic_ostream& operator<<(double f);
560b57cec5SDimitry Andric    basic_ostream& operator<<(long double f);
570b57cec5SDimitry Andric    basic_ostream& operator<<(const void* p);
58349cc55cSDimitry Andric    basic_ostream& operator<<(const volatile void* val); // C++23
590b57cec5SDimitry Andric    basic_ostream& operator<<(basic_streambuf<char_type,traits>* sb);
600b57cec5SDimitry Andric    basic_ostream& operator<<(nullptr_t);
610b57cec5SDimitry Andric
620b57cec5SDimitry Andric    // 27.7.2.7 Unformatted output:
630b57cec5SDimitry Andric    basic_ostream& put(char_type c);
640b57cec5SDimitry Andric    basic_ostream& write(const char_type* s, streamsize n);
650b57cec5SDimitry Andric    basic_ostream& flush();
660b57cec5SDimitry Andric
670b57cec5SDimitry Andric    // 27.7.2.5 seeks:
680b57cec5SDimitry Andric    pos_type tellp();
690b57cec5SDimitry Andric    basic_ostream& seekp(pos_type);
700b57cec5SDimitry Andric    basic_ostream& seekp(off_type, ios_base::seekdir);
710b57cec5SDimitry Andricprotected:
720b57cec5SDimitry Andric    basic_ostream(const basic_ostream& rhs) = delete;
730b57cec5SDimitry Andric    basic_ostream(basic_ostream&& rhs);
740b57cec5SDimitry Andric    // 27.7.3.3 Assign/swap
750b57cec5SDimitry Andric    basic_ostream& operator=(basic_ostream& rhs) = delete;
760b57cec5SDimitry Andric    basic_ostream& operator=(const basic_ostream&& rhs);
770b57cec5SDimitry Andric    void swap(basic_ostream& rhs);
780b57cec5SDimitry Andric};
790b57cec5SDimitry Andric
800b57cec5SDimitry Andric// 27.7.2.6.4 character inserters
810b57cec5SDimitry Andric
820b57cec5SDimitry Andrictemplate<class charT, class traits>
830b57cec5SDimitry Andric  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, charT);
840b57cec5SDimitry Andric
850b57cec5SDimitry Andrictemplate<class charT, class traits>
860b57cec5SDimitry Andric  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, char);
870b57cec5SDimitry Andric
880b57cec5SDimitry Andrictemplate<class traits>
890b57cec5SDimitry Andric  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, char);
900b57cec5SDimitry Andric
910b57cec5SDimitry Andric// signed and unsigned
920b57cec5SDimitry Andric
930b57cec5SDimitry Andrictemplate<class traits>
940b57cec5SDimitry Andric  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, signed char);
950b57cec5SDimitry Andric
960b57cec5SDimitry Andrictemplate<class traits>
970b57cec5SDimitry Andric  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, unsigned char);
980b57cec5SDimitry Andric
990b57cec5SDimitry Andric// NTBS
1000b57cec5SDimitry Andrictemplate<class charT, class traits>
1010b57cec5SDimitry Andric  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const charT*);
1020b57cec5SDimitry Andric
1030b57cec5SDimitry Andrictemplate<class charT, class traits>
1040b57cec5SDimitry Andric  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const char*);
1050b57cec5SDimitry Andric
1060b57cec5SDimitry Andrictemplate<class traits>
1070b57cec5SDimitry Andric  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const char*);
1080b57cec5SDimitry Andric
1090b57cec5SDimitry Andric// signed and unsigned
1100b57cec5SDimitry Andrictemplate<class traits>
1110b57cec5SDimitry Andricbasic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const signed char*);
1120b57cec5SDimitry Andric
1130b57cec5SDimitry Andrictemplate<class traits>
1140b57cec5SDimitry Andric  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const unsigned char*);
1150b57cec5SDimitry Andric
1160b57cec5SDimitry Andric// swap:
1170b57cec5SDimitry Andrictemplate <class charT, class traits>
1180b57cec5SDimitry Andric  void swap(basic_ostream<charT, traits>& x, basic_ostream<charT, traits>& y);
1190b57cec5SDimitry Andric
1200b57cec5SDimitry Andrictemplate <class charT, class traits>
1210b57cec5SDimitry Andric  basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
1220b57cec5SDimitry Andric
1230b57cec5SDimitry Andrictemplate <class charT, class traits>
1240b57cec5SDimitry Andric  basic_ostream<charT,traits>& ends(basic_ostream<charT,traits>& os);
1250b57cec5SDimitry Andric
1260b57cec5SDimitry Andrictemplate <class charT, class traits>
1270b57cec5SDimitry Andric  basic_ostream<charT,traits>& flush(basic_ostream<charT,traits>& os);
1280b57cec5SDimitry Andric
1290b57cec5SDimitry Andric// rvalue stream insertion
130e8d8bef9SDimitry Andrictemplate <class Stream, class T>
131e8d8bef9SDimitry Andric  Stream&& operator<<(Stream&& os, const T& x);
1320b57cec5SDimitry Andric
133fcaf7f86SDimitry Andrictemplate<class traits>
134fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, wchar_t) = delete;               // since C++20
135fcaf7f86SDimitry Andrictemplate<class traits>
136fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char8_t) = delete;               // since C++20
137fcaf7f86SDimitry Andrictemplate<class traits>
138fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char16_t) = delete;              // since C++20
139fcaf7f86SDimitry Andrictemplate<class traits>
140fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char32_t) = delete;              // since C++20
141fcaf7f86SDimitry Andrictemplate<class traits>
142fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char8_t) = delete;         // since C++20
143fcaf7f86SDimitry Andrictemplate<class traits>
144fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char16_t) = delete;        // since C++20
145fcaf7f86SDimitry Andrictemplate<class traits>
146fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char32_t) = delete;        // since C++20
147fcaf7f86SDimitry Andrictemplate<class traits>
148fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const wchar_t*) = delete;        // since C++20
149fcaf7f86SDimitry Andrictemplate<class traits>
150fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char8_t*) = delete;        // since C++20
151fcaf7f86SDimitry Andrictemplate<class traits>
152fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char16_t*) = delete;       // since C++20
153fcaf7f86SDimitry Andrictemplate<class traits>
154fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char32_t*) = delete;       // since C++20
155fcaf7f86SDimitry Andrictemplate<class traits>
156fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char8_t*) = delete;  // since C++20
157fcaf7f86SDimitry Andrictemplate<class traits>
158fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char16_t*) = delete; // since C++20
159fcaf7f86SDimitry Andrictemplate<class traits>
160fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char32_t*) = delete; // since C++20
161fcaf7f86SDimitry Andric
1620b57cec5SDimitry Andric}  // std
1630b57cec5SDimitry Andric
1640b57cec5SDimitry Andric*/
1650b57cec5SDimitry Andric
16681ad6265SDimitry Andric#include <__assert> // all public C++ headers provide the assertion handler
1670b57cec5SDimitry Andric#include <__config>
168*06c3fb27SDimitry Andric#include <__exception/operations.h>
169*06c3fb27SDimitry Andric#include <__fwd/ostream.h>
170bdd1243dSDimitry Andric#include <__memory/shared_ptr.h>
171bdd1243dSDimitry Andric#include <__memory/unique_ptr.h>
172*06c3fb27SDimitry Andric#include <__system_error/error_code.h>
173*06c3fb27SDimitry Andric#include <__type_traits/conjunction.h>
174*06c3fb27SDimitry Andric#include <__type_traits/enable_if.h>
175*06c3fb27SDimitry Andric#include <__type_traits/is_base_of.h>
176*06c3fb27SDimitry Andric#include <__type_traits/void_t.h>
177*06c3fb27SDimitry Andric#include <__utility/declval.h>
1780b57cec5SDimitry Andric#include <bitset>
179fe6060f1SDimitry Andric#include <ios>
180fe6060f1SDimitry Andric#include <locale>
181bdd1243dSDimitry Andric#include <new>
182fe6060f1SDimitry Andric#include <streambuf>
1830b57cec5SDimitry Andric#include <version>
1840b57cec5SDimitry Andric
1850b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1860b57cec5SDimitry Andric#  pragma GCC system_header
1870b57cec5SDimitry Andric#endif
1880b57cec5SDimitry Andric
1890b57cec5SDimitry Andric_LIBCPP_BEGIN_NAMESPACE_STD
1900b57cec5SDimitry Andric
1910b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
1920b57cec5SDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_ostream
1930b57cec5SDimitry Andric    : virtual public basic_ios<_CharT, _Traits>
1940b57cec5SDimitry Andric{
1950b57cec5SDimitry Andricpublic:
1960b57cec5SDimitry Andric    // types (inherited from basic_ios (27.5.4)):
1970b57cec5SDimitry Andric    typedef _CharT                         char_type;
1980b57cec5SDimitry Andric    typedef _Traits                        traits_type;
1990b57cec5SDimitry Andric    typedef typename traits_type::int_type int_type;
2000b57cec5SDimitry Andric    typedef typename traits_type::pos_type pos_type;
2010b57cec5SDimitry Andric    typedef typename traits_type::off_type off_type;
2020b57cec5SDimitry Andric
2030b57cec5SDimitry Andric    // 27.7.2.2 Constructor/destructor:
2040b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
2050b57cec5SDimitry Andric    explicit basic_ostream(basic_streambuf<char_type, traits_type>* __sb)
2060b57cec5SDimitry Andric    { this->init(__sb); }
207bdd1243dSDimitry Andric    ~basic_ostream() override;
2080b57cec5SDimitry Andricprotected:
2090b57cec5SDimitry Andric    inline _LIBCPP_INLINE_VISIBILITY
2100b57cec5SDimitry Andric    basic_ostream(basic_ostream&& __rhs);
2110b57cec5SDimitry Andric
2120b57cec5SDimitry Andric    // 27.7.2.3 Assign/swap
2130b57cec5SDimitry Andric    inline _LIBCPP_INLINE_VISIBILITY
2140b57cec5SDimitry Andric    basic_ostream& operator=(basic_ostream&& __rhs);
215fe6060f1SDimitry Andric
2160b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
2170b57cec5SDimitry Andric    void swap(basic_ostream& __rhs)
2180b57cec5SDimitry Andric    { basic_ios<char_type, traits_type>::swap(__rhs); }
2190b57cec5SDimitry Andric
2200b57cec5SDimitry Andric    basic_ostream           (const basic_ostream& __rhs) = delete;
2210b57cec5SDimitry Andric    basic_ostream& operator=(const basic_ostream& __rhs) = delete;
2220b57cec5SDimitry Andric
223fe6060f1SDimitry Andricpublic:
2240b57cec5SDimitry Andric    // 27.7.2.4 Prefix/suffix:
2250b57cec5SDimitry Andric    class _LIBCPP_TEMPLATE_VIS sentry;
2260b57cec5SDimitry Andric
2270b57cec5SDimitry Andric    // 27.7.2.6 Formatted output:
2280b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
2290b57cec5SDimitry Andric    basic_ostream& operator<<(basic_ostream& (*__pf)(basic_ostream&))
2300b57cec5SDimitry Andric    { return __pf(*this); }
2310b57cec5SDimitry Andric
2320b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
2330b57cec5SDimitry Andric    basic_ostream& operator<<(basic_ios<char_type, traits_type>&
2340b57cec5SDimitry Andric                              (*__pf)(basic_ios<char_type,traits_type>&))
2350b57cec5SDimitry Andric    { __pf(*this); return *this; }
2360b57cec5SDimitry Andric
2370b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
2380b57cec5SDimitry Andric    basic_ostream& operator<<(ios_base& (*__pf)(ios_base&))
2390b57cec5SDimitry Andric    { __pf(*this); return *this; }
2400b57cec5SDimitry Andric
2410b57cec5SDimitry Andric    basic_ostream& operator<<(bool __n);
2420b57cec5SDimitry Andric    basic_ostream& operator<<(short __n);
2430b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned short __n);
2440b57cec5SDimitry Andric    basic_ostream& operator<<(int __n);
2450b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned int __n);
2460b57cec5SDimitry Andric    basic_ostream& operator<<(long __n);
2470b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned long __n);
2480b57cec5SDimitry Andric    basic_ostream& operator<<(long long __n);
2490b57cec5SDimitry Andric    basic_ostream& operator<<(unsigned long long __n);
2500b57cec5SDimitry Andric    basic_ostream& operator<<(float __f);
2510b57cec5SDimitry Andric    basic_ostream& operator<<(double __f);
2520b57cec5SDimitry Andric    basic_ostream& operator<<(long double __f);
2530b57cec5SDimitry Andric    basic_ostream& operator<<(const void* __p);
254349cc55cSDimitry Andric
255*06c3fb27SDimitry Andric#if _LIBCPP_STD_VER >= 23
256349cc55cSDimitry Andric    _LIBCPP_HIDE_FROM_ABI
257349cc55cSDimitry Andric    basic_ostream& operator<<(const volatile void* __p) {
258349cc55cSDimitry Andric        return operator<<(const_cast<const void*>(__p));
259349cc55cSDimitry Andric    }
260349cc55cSDimitry Andric#endif
261349cc55cSDimitry Andric
2620b57cec5SDimitry Andric    basic_ostream& operator<<(basic_streambuf<char_type, traits_type>* __sb);
2630b57cec5SDimitry Andric
264*06c3fb27SDimitry Andric#if _LIBCPP_STD_VER >= 17
265fcaf7f86SDimitry Andric// LWG 2221 - nullptr. This is not backported to older standards modes.
266fcaf7f86SDimitry Andric// See https://reviews.llvm.org/D127033 for more info on the rationale.
2670b57cec5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
2680b57cec5SDimitry Andric    basic_ostream& operator<<(nullptr_t)
2690b57cec5SDimitry Andric    { return *this << "nullptr"; }
270fcaf7f86SDimitry Andric#endif
2710b57cec5SDimitry Andric
2720b57cec5SDimitry Andric    // 27.7.2.7 Unformatted output:
2730b57cec5SDimitry Andric    basic_ostream& put(char_type __c);
2740b57cec5SDimitry Andric    basic_ostream& write(const char_type* __s, streamsize __n);
2750b57cec5SDimitry Andric    basic_ostream& flush();
2760b57cec5SDimitry Andric
2770b57cec5SDimitry Andric    // 27.7.2.5 seeks:
2780b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
2790b57cec5SDimitry Andric    pos_type tellp();
2800b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
2810b57cec5SDimitry Andric    basic_ostream& seekp(pos_type __pos);
2820b57cec5SDimitry Andric    inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
2830b57cec5SDimitry Andric    basic_ostream& seekp(off_type __off, ios_base::seekdir __dir);
2840b57cec5SDimitry Andric
2850b57cec5SDimitry Andricprotected:
2860b57cec5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
2870b57cec5SDimitry Andric    basic_ostream() {}  // extension, intentially does not initialize
2880b57cec5SDimitry Andric};
2890b57cec5SDimitry Andric
2900b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
2910b57cec5SDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_ostream<_CharT, _Traits>::sentry
2920b57cec5SDimitry Andric{
2930b57cec5SDimitry Andric    bool __ok_;
2940b57cec5SDimitry Andric    basic_ostream<_CharT, _Traits>& __os_;
2950b57cec5SDimitry Andric
2960b57cec5SDimitry Andricpublic:
2970b57cec5SDimitry Andric    explicit sentry(basic_ostream<_CharT, _Traits>& __os);
2980b57cec5SDimitry Andric    ~sentry();
2990eae32dcSDimitry Andric    sentry(const sentry&) = delete;
3000eae32dcSDimitry Andric    sentry& operator=(const sentry&) = delete;
3010b57cec5SDimitry Andric
3020b57cec5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
303fe6060f1SDimitry Andric    explicit operator bool() const {return __ok_;}
3040b57cec5SDimitry Andric};
3050b57cec5SDimitry Andric
3060b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
3070b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::sentry::sentry(basic_ostream<_CharT, _Traits>& __os)
3080b57cec5SDimitry Andric    : __ok_(false),
3090b57cec5SDimitry Andric      __os_(__os)
3100b57cec5SDimitry Andric{
3110b57cec5SDimitry Andric    if (__os.good())
3120b57cec5SDimitry Andric    {
3130b57cec5SDimitry Andric        if (__os.tie())
3140b57cec5SDimitry Andric            __os.tie()->flush();
3150b57cec5SDimitry Andric        __ok_ = true;
3160b57cec5SDimitry Andric    }
3170b57cec5SDimitry Andric}
3180b57cec5SDimitry Andric
3190b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
3200b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::sentry::~sentry()
3210b57cec5SDimitry Andric{
3220b57cec5SDimitry Andric    if (__os_.rdbuf() && __os_.good() && (__os_.flags() & ios_base::unitbuf)
3230b57cec5SDimitry Andric                      && !uncaught_exception())
3240b57cec5SDimitry Andric    {
325*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
3260b57cec5SDimitry Andric        try
3270b57cec5SDimitry Andric        {
328*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
3290b57cec5SDimitry Andric            if (__os_.rdbuf()->pubsync() == -1)
3300b57cec5SDimitry Andric                __os_.setstate(ios_base::badbit);
331*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
3320b57cec5SDimitry Andric        }
3330b57cec5SDimitry Andric        catch (...)
3340b57cec5SDimitry Andric        {
3350b57cec5SDimitry Andric        }
336*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
3370b57cec5SDimitry Andric    }
3380b57cec5SDimitry Andric}
3390b57cec5SDimitry Andric
3400b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
3410b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::basic_ostream(basic_ostream&& __rhs)
3420b57cec5SDimitry Andric{
3430b57cec5SDimitry Andric    this->move(__rhs);
3440b57cec5SDimitry Andric}
3450b57cec5SDimitry Andric
3460b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
3470b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
3480b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator=(basic_ostream&& __rhs)
3490b57cec5SDimitry Andric{
3500b57cec5SDimitry Andric    swap(__rhs);
3510b57cec5SDimitry Andric    return *this;
3520b57cec5SDimitry Andric}
3530b57cec5SDimitry Andric
3540b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
3550b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::~basic_ostream()
3560b57cec5SDimitry Andric{
3570b57cec5SDimitry Andric}
3580b57cec5SDimitry Andric
3590b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
3600b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
3610b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(basic_streambuf<char_type, traits_type>* __sb)
3620b57cec5SDimitry Andric{
363*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
3640b57cec5SDimitry Andric    try
3650b57cec5SDimitry Andric    {
366*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
3670b57cec5SDimitry Andric        sentry __s(*this);
3680b57cec5SDimitry Andric        if (__s)
3690b57cec5SDimitry Andric        {
3700b57cec5SDimitry Andric            if (__sb)
3710b57cec5SDimitry Andric            {
372*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
3730b57cec5SDimitry Andric                try
3740b57cec5SDimitry Andric                {
375*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
3760b57cec5SDimitry Andric                    typedef istreambuf_iterator<_CharT, _Traits> _Ip;
3770b57cec5SDimitry Andric                    typedef ostreambuf_iterator<_CharT, _Traits> _Op;
3780b57cec5SDimitry Andric                    _Ip __i(__sb);
3790b57cec5SDimitry Andric                    _Ip __eof;
3800b57cec5SDimitry Andric                    _Op __o(*this);
3810b57cec5SDimitry Andric                    size_t __c = 0;
3820b57cec5SDimitry Andric                    for (; __i != __eof; ++__i, ++__o, ++__c)
3830b57cec5SDimitry Andric                    {
3840b57cec5SDimitry Andric                        *__o = *__i;
3850b57cec5SDimitry Andric                        if (__o.failed())
3860b57cec5SDimitry Andric                            break;
3870b57cec5SDimitry Andric                    }
3880b57cec5SDimitry Andric                    if (__c == 0)
3890b57cec5SDimitry Andric                        this->setstate(ios_base::failbit);
390*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
3910b57cec5SDimitry Andric                }
3920b57cec5SDimitry Andric                catch (...)
3930b57cec5SDimitry Andric                {
3940b57cec5SDimitry Andric                    this->__set_failbit_and_consider_rethrow();
3950b57cec5SDimitry Andric                }
396*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
3970b57cec5SDimitry Andric            }
3980b57cec5SDimitry Andric            else
3990b57cec5SDimitry Andric                this->setstate(ios_base::badbit);
4000b57cec5SDimitry Andric        }
401*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
4020b57cec5SDimitry Andric    }
4030b57cec5SDimitry Andric    catch (...)
4040b57cec5SDimitry Andric    {
4050b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
4060b57cec5SDimitry Andric    }
407*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
4080b57cec5SDimitry Andric    return *this;
4090b57cec5SDimitry Andric}
4100b57cec5SDimitry Andric
4110b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
4120b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
4130b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(bool __n)
4140b57cec5SDimitry Andric{
415*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
4160b57cec5SDimitry Andric    try
4170b57cec5SDimitry Andric    {
418*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
4190b57cec5SDimitry Andric        sentry __s(*this);
4200b57cec5SDimitry Andric        if (__s)
4210b57cec5SDimitry Andric        {
4220b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
423bdd1243dSDimitry Andric            const _Fp& __f = std::use_facet<_Fp>(this->getloc());
4240b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
4250b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
4260b57cec5SDimitry Andric        }
427*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
4280b57cec5SDimitry Andric    }
4290b57cec5SDimitry Andric    catch (...)
4300b57cec5SDimitry Andric    {
4310b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
4320b57cec5SDimitry Andric    }
433*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
4340b57cec5SDimitry Andric    return *this;
4350b57cec5SDimitry Andric}
4360b57cec5SDimitry Andric
4370b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
4380b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
4390b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(short __n)
4400b57cec5SDimitry Andric{
441*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
4420b57cec5SDimitry Andric    try
4430b57cec5SDimitry Andric    {
444*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
4450b57cec5SDimitry Andric        sentry __s(*this);
4460b57cec5SDimitry Andric        if (__s)
4470b57cec5SDimitry Andric        {
4480b57cec5SDimitry Andric            ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield;
4490b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
450bdd1243dSDimitry Andric            const _Fp& __f = std::use_facet<_Fp>(this->getloc());
4510b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(),
4520b57cec5SDimitry Andric                        __flags == ios_base::oct || __flags == ios_base::hex ?
4530b57cec5SDimitry Andric                        static_cast<long>(static_cast<unsigned short>(__n))  :
4540b57cec5SDimitry Andric                        static_cast<long>(__n)).failed())
4550b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
4560b57cec5SDimitry Andric        }
457*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
4580b57cec5SDimitry Andric    }
4590b57cec5SDimitry Andric    catch (...)
4600b57cec5SDimitry Andric    {
4610b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
4620b57cec5SDimitry Andric    }
463*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
4640b57cec5SDimitry Andric    return *this;
4650b57cec5SDimitry Andric}
4660b57cec5SDimitry Andric
4670b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
4680b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
4690b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned short __n)
4700b57cec5SDimitry Andric{
471*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
4720b57cec5SDimitry Andric    try
4730b57cec5SDimitry Andric    {
474*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
4750b57cec5SDimitry Andric        sentry __s(*this);
4760b57cec5SDimitry Andric        if (__s)
4770b57cec5SDimitry Andric        {
4780b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
479bdd1243dSDimitry Andric            const _Fp& __f = std::use_facet<_Fp>(this->getloc());
4800b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(__n)).failed())
4810b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
4820b57cec5SDimitry Andric        }
483*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
4840b57cec5SDimitry Andric    }
4850b57cec5SDimitry Andric    catch (...)
4860b57cec5SDimitry Andric    {
4870b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
4880b57cec5SDimitry Andric    }
489*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
4900b57cec5SDimitry Andric    return *this;
4910b57cec5SDimitry Andric}
4920b57cec5SDimitry Andric
4930b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
4940b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
4950b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(int __n)
4960b57cec5SDimitry Andric{
497*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
4980b57cec5SDimitry Andric    try
4990b57cec5SDimitry Andric    {
500*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
5010b57cec5SDimitry Andric        sentry __s(*this);
5020b57cec5SDimitry Andric        if (__s)
5030b57cec5SDimitry Andric        {
5040b57cec5SDimitry Andric            ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield;
5050b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
506bdd1243dSDimitry Andric            const _Fp& __f = std::use_facet<_Fp>(this->getloc());
5070b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(),
5080b57cec5SDimitry Andric                        __flags == ios_base::oct || __flags == ios_base::hex ?
5090b57cec5SDimitry Andric                        static_cast<long>(static_cast<unsigned int>(__n))  :
5100b57cec5SDimitry Andric                        static_cast<long>(__n)).failed())
5110b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
5120b57cec5SDimitry Andric        }
513*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
5140b57cec5SDimitry Andric    }
5150b57cec5SDimitry Andric    catch (...)
5160b57cec5SDimitry Andric    {
5170b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
5180b57cec5SDimitry Andric    }
519*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
5200b57cec5SDimitry Andric    return *this;
5210b57cec5SDimitry Andric}
5220b57cec5SDimitry Andric
5230b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
5240b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
5250b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned int __n)
5260b57cec5SDimitry Andric{
527*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
5280b57cec5SDimitry Andric    try
5290b57cec5SDimitry Andric    {
530*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
5310b57cec5SDimitry Andric        sentry __s(*this);
5320b57cec5SDimitry Andric        if (__s)
5330b57cec5SDimitry Andric        {
5340b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
535bdd1243dSDimitry Andric            const _Fp& __f = std::use_facet<_Fp>(this->getloc());
5360b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(__n)).failed())
5370b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
5380b57cec5SDimitry Andric        }
539*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
5400b57cec5SDimitry Andric    }
5410b57cec5SDimitry Andric    catch (...)
5420b57cec5SDimitry Andric    {
5430b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
5440b57cec5SDimitry Andric    }
545*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
5460b57cec5SDimitry Andric    return *this;
5470b57cec5SDimitry Andric}
5480b57cec5SDimitry Andric
5490b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
5500b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
5510b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(long __n)
5520b57cec5SDimitry Andric{
553*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
5540b57cec5SDimitry Andric    try
5550b57cec5SDimitry Andric    {
556*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
5570b57cec5SDimitry Andric        sentry __s(*this);
5580b57cec5SDimitry Andric        if (__s)
5590b57cec5SDimitry Andric        {
5600b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
561bdd1243dSDimitry Andric            const _Fp& __f = std::use_facet<_Fp>(this->getloc());
5620b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
5630b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
5640b57cec5SDimitry Andric        }
565*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
5660b57cec5SDimitry Andric    }
5670b57cec5SDimitry Andric    catch (...)
5680b57cec5SDimitry Andric    {
5690b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
5700b57cec5SDimitry Andric    }
571*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
5720b57cec5SDimitry Andric    return *this;
5730b57cec5SDimitry Andric}
5740b57cec5SDimitry Andric
5750b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
5760b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
5770b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned long __n)
5780b57cec5SDimitry Andric{
579*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
5800b57cec5SDimitry Andric    try
5810b57cec5SDimitry Andric    {
582*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
5830b57cec5SDimitry Andric        sentry __s(*this);
5840b57cec5SDimitry Andric        if (__s)
5850b57cec5SDimitry Andric        {
5860b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
587bdd1243dSDimitry Andric            const _Fp& __f = std::use_facet<_Fp>(this->getloc());
5880b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
5890b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
5900b57cec5SDimitry Andric        }
591*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
5920b57cec5SDimitry Andric    }
5930b57cec5SDimitry Andric    catch (...)
5940b57cec5SDimitry Andric    {
5950b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
5960b57cec5SDimitry Andric    }
597*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
5980b57cec5SDimitry Andric    return *this;
5990b57cec5SDimitry Andric}
6000b57cec5SDimitry Andric
6010b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
6020b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
6030b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(long long __n)
6040b57cec5SDimitry Andric{
605*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
6060b57cec5SDimitry Andric    try
6070b57cec5SDimitry Andric    {
608*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
6090b57cec5SDimitry Andric        sentry __s(*this);
6100b57cec5SDimitry Andric        if (__s)
6110b57cec5SDimitry Andric        {
6120b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
613bdd1243dSDimitry Andric            const _Fp& __f = std::use_facet<_Fp>(this->getloc());
6140b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
6150b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
6160b57cec5SDimitry Andric        }
617*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
6180b57cec5SDimitry Andric    }
6190b57cec5SDimitry Andric    catch (...)
6200b57cec5SDimitry Andric    {
6210b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
6220b57cec5SDimitry Andric    }
623*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
6240b57cec5SDimitry Andric    return *this;
6250b57cec5SDimitry Andric}
6260b57cec5SDimitry Andric
6270b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
6280b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
6290b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned long long __n)
6300b57cec5SDimitry Andric{
631*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
6320b57cec5SDimitry Andric    try
6330b57cec5SDimitry Andric    {
634*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
6350b57cec5SDimitry Andric        sentry __s(*this);
6360b57cec5SDimitry Andric        if (__s)
6370b57cec5SDimitry Andric        {
6380b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
639bdd1243dSDimitry Andric            const _Fp& __f = std::use_facet<_Fp>(this->getloc());
6400b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
6410b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
6420b57cec5SDimitry Andric        }
643*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
6440b57cec5SDimitry Andric    }
6450b57cec5SDimitry Andric    catch (...)
6460b57cec5SDimitry Andric    {
6470b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
6480b57cec5SDimitry Andric    }
649*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
6500b57cec5SDimitry Andric    return *this;
6510b57cec5SDimitry Andric}
6520b57cec5SDimitry Andric
6530b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
6540b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
6550b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(float __n)
6560b57cec5SDimitry Andric{
657*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
6580b57cec5SDimitry Andric    try
6590b57cec5SDimitry Andric    {
660*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
6610b57cec5SDimitry Andric        sentry __s(*this);
6620b57cec5SDimitry Andric        if (__s)
6630b57cec5SDimitry Andric        {
6640b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
665bdd1243dSDimitry Andric            const _Fp& __f = std::use_facet<_Fp>(this->getloc());
6660b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), static_cast<double>(__n)).failed())
6670b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
6680b57cec5SDimitry Andric        }
669*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
6700b57cec5SDimitry Andric    }
6710b57cec5SDimitry Andric    catch (...)
6720b57cec5SDimitry Andric    {
6730b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
6740b57cec5SDimitry Andric    }
675*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
6760b57cec5SDimitry Andric    return *this;
6770b57cec5SDimitry Andric}
6780b57cec5SDimitry Andric
6790b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
6800b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
6810b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(double __n)
6820b57cec5SDimitry Andric{
683*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
6840b57cec5SDimitry Andric    try
6850b57cec5SDimitry Andric    {
686*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
6870b57cec5SDimitry Andric        sentry __s(*this);
6880b57cec5SDimitry Andric        if (__s)
6890b57cec5SDimitry Andric        {
6900b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
691bdd1243dSDimitry Andric            const _Fp& __f = std::use_facet<_Fp>(this->getloc());
6920b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
6930b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
6940b57cec5SDimitry Andric        }
695*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
6960b57cec5SDimitry Andric    }
6970b57cec5SDimitry Andric    catch (...)
6980b57cec5SDimitry Andric    {
6990b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
7000b57cec5SDimitry Andric    }
701*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
7020b57cec5SDimitry Andric    return *this;
7030b57cec5SDimitry Andric}
7040b57cec5SDimitry Andric
7050b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
7060b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
7070b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(long double __n)
7080b57cec5SDimitry Andric{
709*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
7100b57cec5SDimitry Andric    try
7110b57cec5SDimitry Andric    {
712*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
7130b57cec5SDimitry Andric        sentry __s(*this);
7140b57cec5SDimitry Andric        if (__s)
7150b57cec5SDimitry Andric        {
7160b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
717bdd1243dSDimitry Andric            const _Fp& __f = std::use_facet<_Fp>(this->getloc());
7180b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
7190b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
7200b57cec5SDimitry Andric        }
721*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
7220b57cec5SDimitry Andric    }
7230b57cec5SDimitry Andric    catch (...)
7240b57cec5SDimitry Andric    {
7250b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
7260b57cec5SDimitry Andric    }
727*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
7280b57cec5SDimitry Andric    return *this;
7290b57cec5SDimitry Andric}
7300b57cec5SDimitry Andric
7310b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
7320b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
7330b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(const void* __n)
7340b57cec5SDimitry Andric{
735*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
7360b57cec5SDimitry Andric    try
7370b57cec5SDimitry Andric    {
738*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
7390b57cec5SDimitry Andric        sentry __s(*this);
7400b57cec5SDimitry Andric        if (__s)
7410b57cec5SDimitry Andric        {
7420b57cec5SDimitry Andric            typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp;
743bdd1243dSDimitry Andric            const _Fp& __f = std::use_facet<_Fp>(this->getloc());
7440b57cec5SDimitry Andric            if (__f.put(*this, *this, this->fill(), __n).failed())
7450b57cec5SDimitry Andric                this->setstate(ios_base::badbit | ios_base::failbit);
7460b57cec5SDimitry Andric        }
747*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
7480b57cec5SDimitry Andric    }
7490b57cec5SDimitry Andric    catch (...)
7500b57cec5SDimitry Andric    {
7510b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
7520b57cec5SDimitry Andric    }
753*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
7540b57cec5SDimitry Andric    return *this;
7550b57cec5SDimitry Andric}
7560b57cec5SDimitry Andric
7570b57cec5SDimitry Andrictemplate<class _CharT, class _Traits>
758bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&
7590b57cec5SDimitry Andric__put_character_sequence(basic_ostream<_CharT, _Traits>& __os,
7600b57cec5SDimitry Andric                          const _CharT* __str, size_t __len)
7610b57cec5SDimitry Andric{
762*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
7630b57cec5SDimitry Andric    try
7640b57cec5SDimitry Andric    {
765*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
7660b57cec5SDimitry Andric        typename basic_ostream<_CharT, _Traits>::sentry __s(__os);
7670b57cec5SDimitry Andric        if (__s)
7680b57cec5SDimitry Andric        {
7690b57cec5SDimitry Andric            typedef ostreambuf_iterator<_CharT, _Traits> _Ip;
770bdd1243dSDimitry Andric            if (std::__pad_and_output(_Ip(__os),
7710b57cec5SDimitry Andric                                      __str,
7720b57cec5SDimitry Andric                                      (__os.flags() & ios_base::adjustfield) == ios_base::left ?
7730b57cec5SDimitry Andric                                          __str + __len :
7740b57cec5SDimitry Andric                                          __str,
7750b57cec5SDimitry Andric                                      __str + __len,
7760b57cec5SDimitry Andric                                      __os,
7770b57cec5SDimitry Andric                                      __os.fill()).failed())
7780b57cec5SDimitry Andric                __os.setstate(ios_base::badbit | ios_base::failbit);
7790b57cec5SDimitry Andric        }
780*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
7810b57cec5SDimitry Andric    }
7820b57cec5SDimitry Andric    catch (...)
7830b57cec5SDimitry Andric    {
7840b57cec5SDimitry Andric        __os.__set_badbit_and_consider_rethrow();
7850b57cec5SDimitry Andric    }
786*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
7870b57cec5SDimitry Andric    return __os;
7880b57cec5SDimitry Andric}
7890b57cec5SDimitry Andric
7900b57cec5SDimitry Andric
7910b57cec5SDimitry Andrictemplate<class _CharT, class _Traits>
792bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&
7930b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, _CharT __c)
7940b57cec5SDimitry Andric{
7950b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, &__c, 1);
7960b57cec5SDimitry Andric}
7970b57cec5SDimitry Andric
7980b57cec5SDimitry Andrictemplate<class _CharT, class _Traits>
799bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&
8000b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, char __cn)
8010b57cec5SDimitry Andric{
802*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
8030b57cec5SDimitry Andric    try
8040b57cec5SDimitry Andric    {
805*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
8060b57cec5SDimitry Andric        typename basic_ostream<_CharT, _Traits>::sentry __s(__os);
8070b57cec5SDimitry Andric        if (__s)
8080b57cec5SDimitry Andric        {
8090b57cec5SDimitry Andric            _CharT __c = __os.widen(__cn);
8100b57cec5SDimitry Andric            typedef ostreambuf_iterator<_CharT, _Traits> _Ip;
811bdd1243dSDimitry Andric            if (std::__pad_and_output(_Ip(__os),
8120b57cec5SDimitry Andric                                      &__c,
8130b57cec5SDimitry Andric                                      (__os.flags() & ios_base::adjustfield) == ios_base::left ?
8140b57cec5SDimitry Andric                                          &__c + 1 :
8150b57cec5SDimitry Andric                                          &__c,
8160b57cec5SDimitry Andric                                      &__c + 1,
8170b57cec5SDimitry Andric                                      __os,
8180b57cec5SDimitry Andric                                      __os.fill()).failed())
8190b57cec5SDimitry Andric                __os.setstate(ios_base::badbit | ios_base::failbit);
8200b57cec5SDimitry Andric        }
821*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
8220b57cec5SDimitry Andric    }
8230b57cec5SDimitry Andric    catch (...)
8240b57cec5SDimitry Andric    {
8250b57cec5SDimitry Andric        __os.__set_badbit_and_consider_rethrow();
8260b57cec5SDimitry Andric    }
827*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
8280b57cec5SDimitry Andric    return __os;
8290b57cec5SDimitry Andric}
8300b57cec5SDimitry Andric
8310b57cec5SDimitry Andrictemplate<class _Traits>
832bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI basic_ostream<char, _Traits>&
8330b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, char __c)
8340b57cec5SDimitry Andric{
8350b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, &__c, 1);
8360b57cec5SDimitry Andric}
8370b57cec5SDimitry Andric
8380b57cec5SDimitry Andrictemplate<class _Traits>
839bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI basic_ostream<char, _Traits>&
8400b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, signed char __c)
8410b57cec5SDimitry Andric{
8420b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, (char *) &__c, 1);
8430b57cec5SDimitry Andric}
8440b57cec5SDimitry Andric
8450b57cec5SDimitry Andrictemplate<class _Traits>
846bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI basic_ostream<char, _Traits>&
8470b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, unsigned char __c)
8480b57cec5SDimitry Andric{
8490b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, (char *) &__c, 1);
8500b57cec5SDimitry Andric}
8510b57cec5SDimitry Andric
8520b57cec5SDimitry Andrictemplate<class _CharT, class _Traits>
853bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&
8540b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const _CharT* __str)
8550b57cec5SDimitry Andric{
8560b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str));
8570b57cec5SDimitry Andric}
8580b57cec5SDimitry Andric
8590b57cec5SDimitry Andrictemplate<class _CharT, class _Traits>
860bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&
8610b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const char* __strn)
8620b57cec5SDimitry Andric{
863*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
8640b57cec5SDimitry Andric    try
8650b57cec5SDimitry Andric    {
866*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
8670b57cec5SDimitry Andric        typename basic_ostream<_CharT, _Traits>::sentry __s(__os);
8680b57cec5SDimitry Andric        if (__s)
8690b57cec5SDimitry Andric        {
8700b57cec5SDimitry Andric            typedef ostreambuf_iterator<_CharT, _Traits> _Ip;
8710b57cec5SDimitry Andric            size_t __len = char_traits<char>::length(__strn);
8720b57cec5SDimitry Andric            const int __bs = 100;
8730b57cec5SDimitry Andric            _CharT __wbb[__bs];
8740b57cec5SDimitry Andric            _CharT* __wb = __wbb;
8750b57cec5SDimitry Andric            unique_ptr<_CharT, void(*)(void*)> __h(0, free);
8760b57cec5SDimitry Andric            if (__len > __bs)
8770b57cec5SDimitry Andric            {
8780b57cec5SDimitry Andric                __wb = (_CharT*)malloc(__len*sizeof(_CharT));
8790b57cec5SDimitry Andric                if (__wb == 0)
8800b57cec5SDimitry Andric                    __throw_bad_alloc();
8810b57cec5SDimitry Andric                __h.reset(__wb);
8820b57cec5SDimitry Andric            }
8830b57cec5SDimitry Andric            for (_CharT* __p = __wb; *__strn != '\0'; ++__strn, ++__p)
8840b57cec5SDimitry Andric                *__p = __os.widen(*__strn);
885bdd1243dSDimitry Andric            if (std::__pad_and_output(_Ip(__os),
8860b57cec5SDimitry Andric                                      __wb,
8870b57cec5SDimitry Andric                                      (__os.flags() & ios_base::adjustfield) == ios_base::left ?
8880b57cec5SDimitry Andric                                          __wb + __len :
8890b57cec5SDimitry Andric                                          __wb,
8900b57cec5SDimitry Andric                                      __wb + __len,
8910b57cec5SDimitry Andric                                      __os,
8920b57cec5SDimitry Andric                                      __os.fill()).failed())
8930b57cec5SDimitry Andric                __os.setstate(ios_base::badbit | ios_base::failbit);
8940b57cec5SDimitry Andric        }
895*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
8960b57cec5SDimitry Andric    }
8970b57cec5SDimitry Andric    catch (...)
8980b57cec5SDimitry Andric    {
8990b57cec5SDimitry Andric        __os.__set_badbit_and_consider_rethrow();
9000b57cec5SDimitry Andric    }
901*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
9020b57cec5SDimitry Andric    return __os;
9030b57cec5SDimitry Andric}
9040b57cec5SDimitry Andric
9050b57cec5SDimitry Andrictemplate<class _Traits>
906bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI basic_ostream<char, _Traits>&
9070b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, const char* __str)
9080b57cec5SDimitry Andric{
9090b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str));
9100b57cec5SDimitry Andric}
9110b57cec5SDimitry Andric
9120b57cec5SDimitry Andrictemplate<class _Traits>
913bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI basic_ostream<char, _Traits>&
9140b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, const signed char* __str)
9150b57cec5SDimitry Andric{
9160b57cec5SDimitry Andric    const char *__s = (const char *) __str;
9170b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s));
9180b57cec5SDimitry Andric}
9190b57cec5SDimitry Andric
9200b57cec5SDimitry Andrictemplate<class _Traits>
921bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI basic_ostream<char, _Traits>&
9220b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, const unsigned char* __str)
9230b57cec5SDimitry Andric{
9240b57cec5SDimitry Andric    const char *__s = (const char *) __str;
9250b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s));
9260b57cec5SDimitry Andric}
9270b57cec5SDimitry Andric
9280b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
9290b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
9300b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::put(char_type __c)
9310b57cec5SDimitry Andric{
932*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
9330b57cec5SDimitry Andric    try
9340b57cec5SDimitry Andric    {
935*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
9360b57cec5SDimitry Andric        sentry __s(*this);
9370b57cec5SDimitry Andric        if (__s)
9380b57cec5SDimitry Andric        {
9390b57cec5SDimitry Andric            typedef ostreambuf_iterator<_CharT, _Traits> _Op;
9400b57cec5SDimitry Andric            _Op __o(*this);
9410b57cec5SDimitry Andric            *__o = __c;
9420b57cec5SDimitry Andric            if (__o.failed())
9430b57cec5SDimitry Andric                this->setstate(ios_base::badbit);
9440b57cec5SDimitry Andric        }
945*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
9460b57cec5SDimitry Andric    }
9470b57cec5SDimitry Andric    catch (...)
9480b57cec5SDimitry Andric    {
9490b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
9500b57cec5SDimitry Andric    }
951*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
9520b57cec5SDimitry Andric    return *this;
9530b57cec5SDimitry Andric}
9540b57cec5SDimitry Andric
9550b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
9560b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
9570b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::write(const char_type* __s, streamsize __n)
9580b57cec5SDimitry Andric{
959*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
9600b57cec5SDimitry Andric    try
9610b57cec5SDimitry Andric    {
962*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
9630b57cec5SDimitry Andric        sentry __sen(*this);
9640b57cec5SDimitry Andric        if (__sen && __n)
9650b57cec5SDimitry Andric        {
9660b57cec5SDimitry Andric            if (this->rdbuf()->sputn(__s, __n) != __n)
9670b57cec5SDimitry Andric                this->setstate(ios_base::badbit);
9680b57cec5SDimitry Andric        }
969*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
9700b57cec5SDimitry Andric    }
9710b57cec5SDimitry Andric    catch (...)
9720b57cec5SDimitry Andric    {
9730b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
9740b57cec5SDimitry Andric    }
975*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
9760b57cec5SDimitry Andric    return *this;
9770b57cec5SDimitry Andric}
9780b57cec5SDimitry Andric
9790b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
9800b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
9810b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::flush()
9820b57cec5SDimitry Andric{
983*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
9840b57cec5SDimitry Andric    try
9850b57cec5SDimitry Andric    {
986*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
9870b57cec5SDimitry Andric        if (this->rdbuf())
9880b57cec5SDimitry Andric        {
9890b57cec5SDimitry Andric            sentry __s(*this);
9900b57cec5SDimitry Andric            if (__s)
9910b57cec5SDimitry Andric            {
9920b57cec5SDimitry Andric                if (this->rdbuf()->pubsync() == -1)
9930b57cec5SDimitry Andric                    this->setstate(ios_base::badbit);
9940b57cec5SDimitry Andric            }
9950b57cec5SDimitry Andric        }
996*06c3fb27SDimitry Andric#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
9970b57cec5SDimitry Andric    }
9980b57cec5SDimitry Andric    catch (...)
9990b57cec5SDimitry Andric    {
10000b57cec5SDimitry Andric        this->__set_badbit_and_consider_rethrow();
10010b57cec5SDimitry Andric    }
1002*06c3fb27SDimitry Andric#endif // _LIBCPP_HAS_NO_EXCEPTIONS
10030b57cec5SDimitry Andric    return *this;
10040b57cec5SDimitry Andric}
10050b57cec5SDimitry Andric
10060b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
10070b57cec5SDimitry Andrictypename basic_ostream<_CharT, _Traits>::pos_type
10080b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::tellp()
10090b57cec5SDimitry Andric{
10100b57cec5SDimitry Andric    if (this->fail())
10110b57cec5SDimitry Andric        return pos_type(-1);
10120b57cec5SDimitry Andric    return this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out);
10130b57cec5SDimitry Andric}
10140b57cec5SDimitry Andric
10150b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
10160b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
10170b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::seekp(pos_type __pos)
10180b57cec5SDimitry Andric{
10190b57cec5SDimitry Andric    sentry __s(*this);
10200b57cec5SDimitry Andric    if (!this->fail())
10210b57cec5SDimitry Andric    {
10220b57cec5SDimitry Andric        if (this->rdbuf()->pubseekpos(__pos, ios_base::out) == pos_type(-1))
10230b57cec5SDimitry Andric            this->setstate(ios_base::failbit);
10240b57cec5SDimitry Andric    }
10250b57cec5SDimitry Andric    return *this;
10260b57cec5SDimitry Andric}
10270b57cec5SDimitry Andric
10280b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
10290b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
10300b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::seekp(off_type __off, ios_base::seekdir __dir)
10310b57cec5SDimitry Andric{
10320b57cec5SDimitry Andric    sentry __s(*this);
10330b57cec5SDimitry Andric    if (!this->fail())
10340b57cec5SDimitry Andric    {
10350b57cec5SDimitry Andric        if (this->rdbuf()->pubseekoff(__off, __dir, ios_base::out) == pos_type(-1))
10360b57cec5SDimitry Andric            this->setstate(ios_base::failbit);
10370b57cec5SDimitry Andric    }
10380b57cec5SDimitry Andric    return *this;
10390b57cec5SDimitry Andric}
10400b57cec5SDimitry Andric
10410b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
1042bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline
10430b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
10440b57cec5SDimitry Andricendl(basic_ostream<_CharT, _Traits>& __os)
10450b57cec5SDimitry Andric{
10460b57cec5SDimitry Andric    __os.put(__os.widen('\n'));
10470b57cec5SDimitry Andric    __os.flush();
10480b57cec5SDimitry Andric    return __os;
10490b57cec5SDimitry Andric}
10500b57cec5SDimitry Andric
10510b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
1052bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline
10530b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
10540b57cec5SDimitry Andricends(basic_ostream<_CharT, _Traits>& __os)
10550b57cec5SDimitry Andric{
10560b57cec5SDimitry Andric    __os.put(_CharT());
10570b57cec5SDimitry Andric    return __os;
10580b57cec5SDimitry Andric}
10590b57cec5SDimitry Andric
10600b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
1061bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI inline
10620b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
10630b57cec5SDimitry Andricflush(basic_ostream<_CharT, _Traits>& __os)
10640b57cec5SDimitry Andric{
10650b57cec5SDimitry Andric    __os.flush();
10660b57cec5SDimitry Andric    return __os;
10670b57cec5SDimitry Andric}
10680b57cec5SDimitry Andric
1069e8d8bef9SDimitry Andrictemplate <class _Stream, class _Tp, class = void>
1070e8d8bef9SDimitry Andricstruct __is_ostreamable : false_type { };
1071e8d8bef9SDimitry Andric
10720b57cec5SDimitry Andrictemplate <class _Stream, class _Tp>
1073e8d8bef9SDimitry Andricstruct __is_ostreamable<_Stream, _Tp, decltype(
1074bdd1243dSDimitry Andric    std::declval<_Stream>() << std::declval<_Tp>(), void()
1075e8d8bef9SDimitry Andric)> : true_type { };
1076e8d8bef9SDimitry Andric
1077e8d8bef9SDimitry Andrictemplate <class _Stream, class _Tp, class = typename enable_if<
1078e8d8bef9SDimitry Andric    _And<is_base_of<ios_base, _Stream>,
1079e8d8bef9SDimitry Andric         __is_ostreamable<_Stream&, const _Tp&> >::value
1080e8d8bef9SDimitry Andric>::type>
1081e8d8bef9SDimitry Andric_LIBCPP_INLINE_VISIBILITY
1082e8d8bef9SDimitry Andric_Stream&& operator<<(_Stream&& __os, const _Tp& __x)
10830b57cec5SDimitry Andric{
10840b57cec5SDimitry Andric    __os << __x;
10850b57cec5SDimitry Andric    return _VSTD::move(__os);
10860b57cec5SDimitry Andric}
10870b57cec5SDimitry Andric
10880b57cec5SDimitry Andrictemplate<class _CharT, class _Traits, class _Allocator>
10890b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
10900b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os,
10910b57cec5SDimitry Andric           const basic_string<_CharT, _Traits, _Allocator>& __str)
10920b57cec5SDimitry Andric{
10930b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, __str.data(), __str.size());
10940b57cec5SDimitry Andric}
10950b57cec5SDimitry Andric
10960b57cec5SDimitry Andrictemplate<class _CharT, class _Traits>
1097bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&
10980b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os,
1099e40139ffSDimitry Andric           basic_string_view<_CharT, _Traits> __sv)
11000b57cec5SDimitry Andric{
11010b57cec5SDimitry Andric    return _VSTD::__put_character_sequence(__os, __sv.data(), __sv.size());
11020b57cec5SDimitry Andric}
11030b57cec5SDimitry Andric
11040b57cec5SDimitry Andrictemplate <class _CharT, class _Traits>
11050b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY
11060b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
11070b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __ec)
11080b57cec5SDimitry Andric{
11090b57cec5SDimitry Andric    return __os << __ec.category().name() << ':' << __ec.value();
11100b57cec5SDimitry Andric}
11110b57cec5SDimitry Andric
11120b57cec5SDimitry Andrictemplate<class _CharT, class _Traits, class _Yp>
11130b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY
11140b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>&
11150b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, shared_ptr<_Yp> const& __p)
11160b57cec5SDimitry Andric{
11170b57cec5SDimitry Andric    return __os << __p.get();
11180b57cec5SDimitry Andric}
11190b57cec5SDimitry Andric
11200b57cec5SDimitry Andrictemplate<class _CharT, class _Traits, class _Yp, class _Dp>
11210b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY
11220b57cec5SDimitry Andrictypename enable_if
11230b57cec5SDimitry Andric<
1124bdd1243dSDimitry Andric    is_same<void, __void_t<decltype((std::declval<basic_ostream<_CharT, _Traits>&>() << std::declval<typename unique_ptr<_Yp, _Dp>::pointer>()))> >::value,
11250b57cec5SDimitry Andric    basic_ostream<_CharT, _Traits>&
11260b57cec5SDimitry Andric>::type
11270b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, unique_ptr<_Yp, _Dp> const& __p)
11280b57cec5SDimitry Andric{
11290b57cec5SDimitry Andric    return __os << __p.get();
11300b57cec5SDimitry Andric}
11310b57cec5SDimitry Andric
11320b57cec5SDimitry Andrictemplate <class _CharT, class _Traits, size_t _Size>
1133bdd1243dSDimitry Andric_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&
11340b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const bitset<_Size>& __x)
11350b57cec5SDimitry Andric{
11360b57cec5SDimitry Andric    return __os << __x.template to_string<_CharT, _Traits>
1137bdd1243dSDimitry Andric                        (std::use_facet<ctype<_CharT> >(__os.getloc()).widen('0'),
1138bdd1243dSDimitry Andric                         std::use_facet<ctype<_CharT> >(__os.getloc()).widen('1'));
11390b57cec5SDimitry Andric}
11400b57cec5SDimitry Andric
1141*06c3fb27SDimitry Andric#if _LIBCPP_STD_VER >= 20
1142fcaf7f86SDimitry Andric
1143fcaf7f86SDimitry Andric#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
1144fcaf7f86SDimitry Andrictemplate <class _Traits>
1145fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, wchar_t) = delete;
1146fcaf7f86SDimitry Andric
1147fcaf7f86SDimitry Andrictemplate <class _Traits>
1148fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const wchar_t*) = delete;
1149fcaf7f86SDimitry Andric
1150fcaf7f86SDimitry Andrictemplate <class _Traits>
1151fcaf7f86SDimitry Andricbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, char16_t) = delete;
1152fcaf7f86SDimitry Andric
1153fcaf7f86SDimitry Andrictemplate <class _Traits>
1154fcaf7f86SDimitry Andricbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, char32_t) = delete;
1155fcaf7f86SDimitry Andric
1156fcaf7f86SDimitry Andrictemplate <class _Traits>
1157fcaf7f86SDimitry Andricbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, const char16_t*) = delete;
1158fcaf7f86SDimitry Andric
1159fcaf7f86SDimitry Andrictemplate <class _Traits>
1160fcaf7f86SDimitry Andricbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, const char32_t*) = delete;
1161fcaf7f86SDimitry Andric
1162fcaf7f86SDimitry Andric#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
1163fcaf7f86SDimitry Andric
1164fcaf7f86SDimitry Andric#ifndef _LIBCPP_HAS_NO_CHAR8_T
1165fcaf7f86SDimitry Andrictemplate <class _Traits>
1166fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, char8_t) = delete;
1167fcaf7f86SDimitry Andric
1168fcaf7f86SDimitry Andrictemplate <class _Traits>
1169fcaf7f86SDimitry Andricbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, char8_t) = delete;
1170fcaf7f86SDimitry Andric
1171fcaf7f86SDimitry Andrictemplate <class _Traits>
1172fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const char8_t*) = delete;
1173fcaf7f86SDimitry Andric
1174fcaf7f86SDimitry Andrictemplate <class _Traits>
1175fcaf7f86SDimitry Andricbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, const char8_t*) = delete;
1176fcaf7f86SDimitry Andric#endif
1177fcaf7f86SDimitry Andric
1178fcaf7f86SDimitry Andrictemplate <class _Traits>
1179fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, char16_t) = delete;
1180fcaf7f86SDimitry Andric
1181fcaf7f86SDimitry Andrictemplate <class _Traits>
1182fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, char32_t) = delete;
1183fcaf7f86SDimitry Andric
1184fcaf7f86SDimitry Andrictemplate <class _Traits>
1185fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const char16_t*) = delete;
1186fcaf7f86SDimitry Andric
1187fcaf7f86SDimitry Andrictemplate <class _Traits>
1188fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const char32_t*) = delete;
1189fcaf7f86SDimitry Andric
1190*06c3fb27SDimitry Andric#endif // _LIBCPP_STD_VER >= 20
1191fcaf7f86SDimitry Andric
119281ad6265SDimitry Andricextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<char>;
1193349cc55cSDimitry Andric#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
119481ad6265SDimitry Andricextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<wchar_t>;
1195349cc55cSDimitry Andric#endif
11960b57cec5SDimitry Andric
11970b57cec5SDimitry Andric_LIBCPP_END_NAMESPACE_STD
11980b57cec5SDimitry Andric
1199bdd1243dSDimitry Andric#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
1200*06c3fb27SDimitry Andric#  include <atomic>
1201bdd1243dSDimitry Andric#  include <concepts>
1202*06c3fb27SDimitry Andric#  include <cstdlib>
1203bdd1243dSDimitry Andric#  include <iterator>
1204bdd1243dSDimitry Andric#  include <type_traits>
1205bdd1243dSDimitry Andric#endif
1206bdd1243dSDimitry Andric
12070b57cec5SDimitry Andric#endif // _LIBCPP_OSTREAM
1208