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