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 133*fcaf7f86SDimitry Andrictemplate<class traits> 134*fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, wchar_t) = delete; // since C++20 135*fcaf7f86SDimitry Andrictemplate<class traits> 136*fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char8_t) = delete; // since C++20 137*fcaf7f86SDimitry Andrictemplate<class traits> 138*fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char16_t) = delete; // since C++20 139*fcaf7f86SDimitry Andrictemplate<class traits> 140*fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char32_t) = delete; // since C++20 141*fcaf7f86SDimitry Andrictemplate<class traits> 142*fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char8_t) = delete; // since C++20 143*fcaf7f86SDimitry Andrictemplate<class traits> 144*fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char16_t) = delete; // since C++20 145*fcaf7f86SDimitry Andrictemplate<class traits> 146*fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char32_t) = delete; // since C++20 147*fcaf7f86SDimitry Andrictemplate<class traits> 148*fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const wchar_t*) = delete; // since C++20 149*fcaf7f86SDimitry Andrictemplate<class traits> 150*fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char8_t*) = delete; // since C++20 151*fcaf7f86SDimitry Andrictemplate<class traits> 152*fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char16_t*) = delete; // since C++20 153*fcaf7f86SDimitry Andrictemplate<class traits> 154*fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char32_t*) = delete; // since C++20 155*fcaf7f86SDimitry Andrictemplate<class traits> 156*fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char8_t*) = delete; // since C++20 157*fcaf7f86SDimitry Andrictemplate<class traits> 158*fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char16_t*) = delete; // since C++20 159*fcaf7f86SDimitry Andrictemplate<class traits> 160*fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char32_t*) = delete; // since C++20 161*fcaf7f86SDimitry 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> 1680b57cec5SDimitry Andric#include <bitset> 169fe6060f1SDimitry Andric#include <ios> 170fe6060f1SDimitry Andric#include <locale> 171fe6060f1SDimitry Andric#include <streambuf> 1720b57cec5SDimitry Andric#include <version> 1730b57cec5SDimitry Andric 17481ad6265SDimitry Andric#ifndef _LIBCPP_REMOVE_TRANSITIVE_INCLUDES 17581ad6265SDimitry Andric# include <iterator> 17681ad6265SDimitry Andric#endif 17781ad6265SDimitry Andric 1780b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1790b57cec5SDimitry Andric# pragma GCC system_header 1800b57cec5SDimitry Andric#endif 1810b57cec5SDimitry Andric 1820b57cec5SDimitry Andric_LIBCPP_BEGIN_NAMESPACE_STD 1830b57cec5SDimitry Andric 1840b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 1850b57cec5SDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_ostream 1860b57cec5SDimitry Andric : virtual public basic_ios<_CharT, _Traits> 1870b57cec5SDimitry Andric{ 1880b57cec5SDimitry Andricpublic: 1890b57cec5SDimitry Andric // types (inherited from basic_ios (27.5.4)): 1900b57cec5SDimitry Andric typedef _CharT char_type; 1910b57cec5SDimitry Andric typedef _Traits traits_type; 1920b57cec5SDimitry Andric typedef typename traits_type::int_type int_type; 1930b57cec5SDimitry Andric typedef typename traits_type::pos_type pos_type; 1940b57cec5SDimitry Andric typedef typename traits_type::off_type off_type; 1950b57cec5SDimitry Andric 1960b57cec5SDimitry Andric // 27.7.2.2 Constructor/destructor: 1970b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 1980b57cec5SDimitry Andric explicit basic_ostream(basic_streambuf<char_type, traits_type>* __sb) 1990b57cec5SDimitry Andric { this->init(__sb); } 2000b57cec5SDimitry Andric virtual ~basic_ostream(); 2010b57cec5SDimitry Andricprotected: 2020b57cec5SDimitry Andric inline _LIBCPP_INLINE_VISIBILITY 2030b57cec5SDimitry Andric basic_ostream(basic_ostream&& __rhs); 2040b57cec5SDimitry Andric 2050b57cec5SDimitry Andric // 27.7.2.3 Assign/swap 2060b57cec5SDimitry Andric inline _LIBCPP_INLINE_VISIBILITY 2070b57cec5SDimitry Andric basic_ostream& operator=(basic_ostream&& __rhs); 208fe6060f1SDimitry Andric 2090b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2100b57cec5SDimitry Andric void swap(basic_ostream& __rhs) 2110b57cec5SDimitry Andric { basic_ios<char_type, traits_type>::swap(__rhs); } 2120b57cec5SDimitry Andric 2130b57cec5SDimitry Andric basic_ostream (const basic_ostream& __rhs) = delete; 2140b57cec5SDimitry Andric basic_ostream& operator=(const basic_ostream& __rhs) = delete; 2150b57cec5SDimitry Andric 216fe6060f1SDimitry Andricpublic: 2170b57cec5SDimitry Andric // 27.7.2.4 Prefix/suffix: 2180b57cec5SDimitry Andric class _LIBCPP_TEMPLATE_VIS sentry; 2190b57cec5SDimitry Andric 2200b57cec5SDimitry Andric // 27.7.2.6 Formatted output: 2210b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2220b57cec5SDimitry Andric basic_ostream& operator<<(basic_ostream& (*__pf)(basic_ostream&)) 2230b57cec5SDimitry Andric { return __pf(*this); } 2240b57cec5SDimitry Andric 2250b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2260b57cec5SDimitry Andric basic_ostream& operator<<(basic_ios<char_type, traits_type>& 2270b57cec5SDimitry Andric (*__pf)(basic_ios<char_type,traits_type>&)) 2280b57cec5SDimitry Andric { __pf(*this); return *this; } 2290b57cec5SDimitry Andric 2300b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2310b57cec5SDimitry Andric basic_ostream& operator<<(ios_base& (*__pf)(ios_base&)) 2320b57cec5SDimitry Andric { __pf(*this); return *this; } 2330b57cec5SDimitry Andric 2340b57cec5SDimitry Andric basic_ostream& operator<<(bool __n); 2350b57cec5SDimitry Andric basic_ostream& operator<<(short __n); 2360b57cec5SDimitry Andric basic_ostream& operator<<(unsigned short __n); 2370b57cec5SDimitry Andric basic_ostream& operator<<(int __n); 2380b57cec5SDimitry Andric basic_ostream& operator<<(unsigned int __n); 2390b57cec5SDimitry Andric basic_ostream& operator<<(long __n); 2400b57cec5SDimitry Andric basic_ostream& operator<<(unsigned long __n); 2410b57cec5SDimitry Andric basic_ostream& operator<<(long long __n); 2420b57cec5SDimitry Andric basic_ostream& operator<<(unsigned long long __n); 2430b57cec5SDimitry Andric basic_ostream& operator<<(float __f); 2440b57cec5SDimitry Andric basic_ostream& operator<<(double __f); 2450b57cec5SDimitry Andric basic_ostream& operator<<(long double __f); 2460b57cec5SDimitry Andric basic_ostream& operator<<(const void* __p); 247349cc55cSDimitry Andric 248349cc55cSDimitry Andric#if _LIBCPP_STD_VER > 20 249349cc55cSDimitry Andric _LIBCPP_HIDE_FROM_ABI 250349cc55cSDimitry Andric basic_ostream& operator<<(const volatile void* __p) { 251349cc55cSDimitry Andric return operator<<(const_cast<const void*>(__p)); 252349cc55cSDimitry Andric } 253349cc55cSDimitry Andric#endif 254349cc55cSDimitry Andric 2550b57cec5SDimitry Andric basic_ostream& operator<<(basic_streambuf<char_type, traits_type>* __sb); 2560b57cec5SDimitry Andric 257*fcaf7f86SDimitry Andric#if _LIBCPP_STD_VER > 14 258*fcaf7f86SDimitry Andric// LWG 2221 - nullptr. This is not backported to older standards modes. 259*fcaf7f86SDimitry Andric// See https://reviews.llvm.org/D127033 for more info on the rationale. 2600b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 2610b57cec5SDimitry Andric basic_ostream& operator<<(nullptr_t) 2620b57cec5SDimitry Andric { return *this << "nullptr"; } 263*fcaf7f86SDimitry Andric#endif 2640b57cec5SDimitry Andric 2650b57cec5SDimitry Andric // 27.7.2.7 Unformatted output: 2660b57cec5SDimitry Andric basic_ostream& put(char_type __c); 2670b57cec5SDimitry Andric basic_ostream& write(const char_type* __s, streamsize __n); 2680b57cec5SDimitry Andric basic_ostream& flush(); 2690b57cec5SDimitry Andric 2700b57cec5SDimitry Andric // 27.7.2.5 seeks: 2710b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2720b57cec5SDimitry Andric pos_type tellp(); 2730b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2740b57cec5SDimitry Andric basic_ostream& seekp(pos_type __pos); 2750b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2760b57cec5SDimitry Andric basic_ostream& seekp(off_type __off, ios_base::seekdir __dir); 2770b57cec5SDimitry Andric 2780b57cec5SDimitry Andricprotected: 2790b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 2800b57cec5SDimitry Andric basic_ostream() {} // extension, intentially does not initialize 2810b57cec5SDimitry Andric}; 2820b57cec5SDimitry Andric 2830b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 2840b57cec5SDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_ostream<_CharT, _Traits>::sentry 2850b57cec5SDimitry Andric{ 2860b57cec5SDimitry Andric bool __ok_; 2870b57cec5SDimitry Andric basic_ostream<_CharT, _Traits>& __os_; 2880b57cec5SDimitry Andric 2890b57cec5SDimitry Andricpublic: 2900b57cec5SDimitry Andric explicit sentry(basic_ostream<_CharT, _Traits>& __os); 2910b57cec5SDimitry Andric ~sentry(); 2920eae32dcSDimitry Andric sentry(const sentry&) = delete; 2930eae32dcSDimitry Andric sentry& operator=(const sentry&) = delete; 2940b57cec5SDimitry Andric 2950b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 296fe6060f1SDimitry Andric explicit operator bool() const {return __ok_;} 2970b57cec5SDimitry Andric}; 2980b57cec5SDimitry Andric 2990b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 3000b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::sentry::sentry(basic_ostream<_CharT, _Traits>& __os) 3010b57cec5SDimitry Andric : __ok_(false), 3020b57cec5SDimitry Andric __os_(__os) 3030b57cec5SDimitry Andric{ 3040b57cec5SDimitry Andric if (__os.good()) 3050b57cec5SDimitry Andric { 3060b57cec5SDimitry Andric if (__os.tie()) 3070b57cec5SDimitry Andric __os.tie()->flush(); 3080b57cec5SDimitry Andric __ok_ = true; 3090b57cec5SDimitry Andric } 3100b57cec5SDimitry Andric} 3110b57cec5SDimitry Andric 3120b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 3130b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::sentry::~sentry() 3140b57cec5SDimitry Andric{ 3150b57cec5SDimitry Andric if (__os_.rdbuf() && __os_.good() && (__os_.flags() & ios_base::unitbuf) 3160b57cec5SDimitry Andric && !uncaught_exception()) 3170b57cec5SDimitry Andric { 3180b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 3190b57cec5SDimitry Andric try 3200b57cec5SDimitry Andric { 3210b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 3220b57cec5SDimitry Andric if (__os_.rdbuf()->pubsync() == -1) 3230b57cec5SDimitry Andric __os_.setstate(ios_base::badbit); 3240b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 3250b57cec5SDimitry Andric } 3260b57cec5SDimitry Andric catch (...) 3270b57cec5SDimitry Andric { 3280b57cec5SDimitry Andric } 3290b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 3300b57cec5SDimitry Andric } 3310b57cec5SDimitry Andric} 3320b57cec5SDimitry Andric 3330b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 3340b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::basic_ostream(basic_ostream&& __rhs) 3350b57cec5SDimitry Andric{ 3360b57cec5SDimitry Andric this->move(__rhs); 3370b57cec5SDimitry Andric} 3380b57cec5SDimitry Andric 3390b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 3400b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 3410b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator=(basic_ostream&& __rhs) 3420b57cec5SDimitry Andric{ 3430b57cec5SDimitry Andric swap(__rhs); 3440b57cec5SDimitry Andric return *this; 3450b57cec5SDimitry Andric} 3460b57cec5SDimitry Andric 3470b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 3480b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::~basic_ostream() 3490b57cec5SDimitry Andric{ 3500b57cec5SDimitry Andric} 3510b57cec5SDimitry Andric 3520b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 3530b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 3540b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(basic_streambuf<char_type, traits_type>* __sb) 3550b57cec5SDimitry Andric{ 3560b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 3570b57cec5SDimitry Andric try 3580b57cec5SDimitry Andric { 3590b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 3600b57cec5SDimitry Andric sentry __s(*this); 3610b57cec5SDimitry Andric if (__s) 3620b57cec5SDimitry Andric { 3630b57cec5SDimitry Andric if (__sb) 3640b57cec5SDimitry Andric { 3650b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 3660b57cec5SDimitry Andric try 3670b57cec5SDimitry Andric { 3680b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 3690b57cec5SDimitry Andric typedef istreambuf_iterator<_CharT, _Traits> _Ip; 3700b57cec5SDimitry Andric typedef ostreambuf_iterator<_CharT, _Traits> _Op; 3710b57cec5SDimitry Andric _Ip __i(__sb); 3720b57cec5SDimitry Andric _Ip __eof; 3730b57cec5SDimitry Andric _Op __o(*this); 3740b57cec5SDimitry Andric size_t __c = 0; 3750b57cec5SDimitry Andric for (; __i != __eof; ++__i, ++__o, ++__c) 3760b57cec5SDimitry Andric { 3770b57cec5SDimitry Andric *__o = *__i; 3780b57cec5SDimitry Andric if (__o.failed()) 3790b57cec5SDimitry Andric break; 3800b57cec5SDimitry Andric } 3810b57cec5SDimitry Andric if (__c == 0) 3820b57cec5SDimitry Andric this->setstate(ios_base::failbit); 3830b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 3840b57cec5SDimitry Andric } 3850b57cec5SDimitry Andric catch (...) 3860b57cec5SDimitry Andric { 3870b57cec5SDimitry Andric this->__set_failbit_and_consider_rethrow(); 3880b57cec5SDimitry Andric } 3890b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 3900b57cec5SDimitry Andric } 3910b57cec5SDimitry Andric else 3920b57cec5SDimitry Andric this->setstate(ios_base::badbit); 3930b57cec5SDimitry Andric } 3940b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 3950b57cec5SDimitry Andric } 3960b57cec5SDimitry Andric catch (...) 3970b57cec5SDimitry Andric { 3980b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 3990b57cec5SDimitry Andric } 4000b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4010b57cec5SDimitry Andric return *this; 4020b57cec5SDimitry Andric} 4030b57cec5SDimitry Andric 4040b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 4050b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 4060b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(bool __n) 4070b57cec5SDimitry Andric{ 4080b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4090b57cec5SDimitry Andric try 4100b57cec5SDimitry Andric { 4110b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4120b57cec5SDimitry Andric sentry __s(*this); 4130b57cec5SDimitry Andric if (__s) 4140b57cec5SDimitry Andric { 4150b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 4160b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 4170b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 4180b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 4190b57cec5SDimitry Andric } 4200b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4210b57cec5SDimitry Andric } 4220b57cec5SDimitry Andric catch (...) 4230b57cec5SDimitry Andric { 4240b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 4250b57cec5SDimitry Andric } 4260b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4270b57cec5SDimitry Andric return *this; 4280b57cec5SDimitry Andric} 4290b57cec5SDimitry Andric 4300b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 4310b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 4320b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(short __n) 4330b57cec5SDimitry Andric{ 4340b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4350b57cec5SDimitry Andric try 4360b57cec5SDimitry Andric { 4370b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4380b57cec5SDimitry Andric sentry __s(*this); 4390b57cec5SDimitry Andric if (__s) 4400b57cec5SDimitry Andric { 4410b57cec5SDimitry Andric ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield; 4420b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 4430b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 4440b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), 4450b57cec5SDimitry Andric __flags == ios_base::oct || __flags == ios_base::hex ? 4460b57cec5SDimitry Andric static_cast<long>(static_cast<unsigned short>(__n)) : 4470b57cec5SDimitry Andric static_cast<long>(__n)).failed()) 4480b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 4490b57cec5SDimitry Andric } 4500b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4510b57cec5SDimitry Andric } 4520b57cec5SDimitry Andric catch (...) 4530b57cec5SDimitry Andric { 4540b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 4550b57cec5SDimitry Andric } 4560b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4570b57cec5SDimitry Andric return *this; 4580b57cec5SDimitry Andric} 4590b57cec5SDimitry Andric 4600b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 4610b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 4620b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned short __n) 4630b57cec5SDimitry Andric{ 4640b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4650b57cec5SDimitry Andric try 4660b57cec5SDimitry Andric { 4670b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4680b57cec5SDimitry Andric sentry __s(*this); 4690b57cec5SDimitry Andric if (__s) 4700b57cec5SDimitry Andric { 4710b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 4720b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 4730b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(__n)).failed()) 4740b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 4750b57cec5SDimitry Andric } 4760b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4770b57cec5SDimitry Andric } 4780b57cec5SDimitry Andric catch (...) 4790b57cec5SDimitry Andric { 4800b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 4810b57cec5SDimitry Andric } 4820b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4830b57cec5SDimitry Andric return *this; 4840b57cec5SDimitry Andric} 4850b57cec5SDimitry Andric 4860b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 4870b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 4880b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(int __n) 4890b57cec5SDimitry Andric{ 4900b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4910b57cec5SDimitry Andric try 4920b57cec5SDimitry Andric { 4930b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4940b57cec5SDimitry Andric sentry __s(*this); 4950b57cec5SDimitry Andric if (__s) 4960b57cec5SDimitry Andric { 4970b57cec5SDimitry Andric ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield; 4980b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 4990b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 5000b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), 5010b57cec5SDimitry Andric __flags == ios_base::oct || __flags == ios_base::hex ? 5020b57cec5SDimitry Andric static_cast<long>(static_cast<unsigned int>(__n)) : 5030b57cec5SDimitry Andric static_cast<long>(__n)).failed()) 5040b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 5050b57cec5SDimitry Andric } 5060b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5070b57cec5SDimitry Andric } 5080b57cec5SDimitry Andric catch (...) 5090b57cec5SDimitry Andric { 5100b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 5110b57cec5SDimitry Andric } 5120b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5130b57cec5SDimitry Andric return *this; 5140b57cec5SDimitry Andric} 5150b57cec5SDimitry Andric 5160b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 5170b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 5180b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned int __n) 5190b57cec5SDimitry Andric{ 5200b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5210b57cec5SDimitry Andric try 5220b57cec5SDimitry Andric { 5230b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5240b57cec5SDimitry Andric sentry __s(*this); 5250b57cec5SDimitry Andric if (__s) 5260b57cec5SDimitry Andric { 5270b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 5280b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 5290b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(__n)).failed()) 5300b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 5310b57cec5SDimitry Andric } 5320b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5330b57cec5SDimitry Andric } 5340b57cec5SDimitry Andric catch (...) 5350b57cec5SDimitry Andric { 5360b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 5370b57cec5SDimitry Andric } 5380b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5390b57cec5SDimitry Andric return *this; 5400b57cec5SDimitry Andric} 5410b57cec5SDimitry Andric 5420b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 5430b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 5440b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(long __n) 5450b57cec5SDimitry Andric{ 5460b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5470b57cec5SDimitry Andric try 5480b57cec5SDimitry Andric { 5490b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5500b57cec5SDimitry Andric sentry __s(*this); 5510b57cec5SDimitry Andric if (__s) 5520b57cec5SDimitry Andric { 5530b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 5540b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 5550b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 5560b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 5570b57cec5SDimitry Andric } 5580b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5590b57cec5SDimitry Andric } 5600b57cec5SDimitry Andric catch (...) 5610b57cec5SDimitry Andric { 5620b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 5630b57cec5SDimitry Andric } 5640b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5650b57cec5SDimitry Andric return *this; 5660b57cec5SDimitry Andric} 5670b57cec5SDimitry Andric 5680b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 5690b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 5700b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned long __n) 5710b57cec5SDimitry Andric{ 5720b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5730b57cec5SDimitry Andric try 5740b57cec5SDimitry Andric { 5750b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5760b57cec5SDimitry Andric sentry __s(*this); 5770b57cec5SDimitry Andric if (__s) 5780b57cec5SDimitry Andric { 5790b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 5800b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 5810b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 5820b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 5830b57cec5SDimitry Andric } 5840b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5850b57cec5SDimitry Andric } 5860b57cec5SDimitry Andric catch (...) 5870b57cec5SDimitry Andric { 5880b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 5890b57cec5SDimitry Andric } 5900b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5910b57cec5SDimitry Andric return *this; 5920b57cec5SDimitry Andric} 5930b57cec5SDimitry Andric 5940b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 5950b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 5960b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(long long __n) 5970b57cec5SDimitry Andric{ 5980b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5990b57cec5SDimitry Andric try 6000b57cec5SDimitry Andric { 6010b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6020b57cec5SDimitry Andric sentry __s(*this); 6030b57cec5SDimitry Andric if (__s) 6040b57cec5SDimitry Andric { 6050b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 6060b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 6070b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 6080b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 6090b57cec5SDimitry Andric } 6100b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6110b57cec5SDimitry Andric } 6120b57cec5SDimitry Andric catch (...) 6130b57cec5SDimitry Andric { 6140b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 6150b57cec5SDimitry Andric } 6160b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6170b57cec5SDimitry Andric return *this; 6180b57cec5SDimitry Andric} 6190b57cec5SDimitry Andric 6200b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 6210b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 6220b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned long long __n) 6230b57cec5SDimitry Andric{ 6240b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6250b57cec5SDimitry Andric try 6260b57cec5SDimitry Andric { 6270b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6280b57cec5SDimitry Andric sentry __s(*this); 6290b57cec5SDimitry Andric if (__s) 6300b57cec5SDimitry Andric { 6310b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 6320b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 6330b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 6340b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 6350b57cec5SDimitry Andric } 6360b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6370b57cec5SDimitry Andric } 6380b57cec5SDimitry Andric catch (...) 6390b57cec5SDimitry Andric { 6400b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 6410b57cec5SDimitry Andric } 6420b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6430b57cec5SDimitry Andric return *this; 6440b57cec5SDimitry Andric} 6450b57cec5SDimitry Andric 6460b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 6470b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 6480b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(float __n) 6490b57cec5SDimitry Andric{ 6500b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6510b57cec5SDimitry Andric try 6520b57cec5SDimitry Andric { 6530b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6540b57cec5SDimitry Andric sentry __s(*this); 6550b57cec5SDimitry Andric if (__s) 6560b57cec5SDimitry Andric { 6570b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 6580b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 6590b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), static_cast<double>(__n)).failed()) 6600b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 6610b57cec5SDimitry Andric } 6620b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6630b57cec5SDimitry Andric } 6640b57cec5SDimitry Andric catch (...) 6650b57cec5SDimitry Andric { 6660b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 6670b57cec5SDimitry Andric } 6680b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6690b57cec5SDimitry Andric return *this; 6700b57cec5SDimitry Andric} 6710b57cec5SDimitry Andric 6720b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 6730b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 6740b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(double __n) 6750b57cec5SDimitry Andric{ 6760b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6770b57cec5SDimitry Andric try 6780b57cec5SDimitry Andric { 6790b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6800b57cec5SDimitry Andric sentry __s(*this); 6810b57cec5SDimitry Andric if (__s) 6820b57cec5SDimitry Andric { 6830b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 6840b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 6850b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 6860b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 6870b57cec5SDimitry Andric } 6880b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6890b57cec5SDimitry Andric } 6900b57cec5SDimitry Andric catch (...) 6910b57cec5SDimitry Andric { 6920b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 6930b57cec5SDimitry Andric } 6940b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6950b57cec5SDimitry Andric return *this; 6960b57cec5SDimitry Andric} 6970b57cec5SDimitry Andric 6980b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 6990b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 7000b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(long double __n) 7010b57cec5SDimitry Andric{ 7020b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 7030b57cec5SDimitry Andric try 7040b57cec5SDimitry Andric { 7050b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 7060b57cec5SDimitry Andric sentry __s(*this); 7070b57cec5SDimitry Andric if (__s) 7080b57cec5SDimitry Andric { 7090b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 7100b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 7110b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 7120b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 7130b57cec5SDimitry Andric } 7140b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 7150b57cec5SDimitry Andric } 7160b57cec5SDimitry Andric catch (...) 7170b57cec5SDimitry Andric { 7180b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 7190b57cec5SDimitry Andric } 7200b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 7210b57cec5SDimitry Andric return *this; 7220b57cec5SDimitry Andric} 7230b57cec5SDimitry Andric 7240b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 7250b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 7260b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(const void* __n) 7270b57cec5SDimitry Andric{ 7280b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 7290b57cec5SDimitry Andric try 7300b57cec5SDimitry Andric { 7310b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 7320b57cec5SDimitry Andric sentry __s(*this); 7330b57cec5SDimitry Andric if (__s) 7340b57cec5SDimitry Andric { 7350b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 7360b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 7370b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 7380b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 7390b57cec5SDimitry Andric } 7400b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 7410b57cec5SDimitry Andric } 7420b57cec5SDimitry Andric catch (...) 7430b57cec5SDimitry Andric { 7440b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 7450b57cec5SDimitry Andric } 7460b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 7470b57cec5SDimitry Andric return *this; 7480b57cec5SDimitry Andric} 7490b57cec5SDimitry Andric 7500b57cec5SDimitry Andrictemplate<class _CharT, class _Traits> 7510b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 7520b57cec5SDimitry Andric__put_character_sequence(basic_ostream<_CharT, _Traits>& __os, 7530b57cec5SDimitry Andric const _CharT* __str, size_t __len) 7540b57cec5SDimitry Andric{ 7550b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 7560b57cec5SDimitry Andric try 7570b57cec5SDimitry Andric { 7580b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 7590b57cec5SDimitry Andric typename basic_ostream<_CharT, _Traits>::sentry __s(__os); 7600b57cec5SDimitry Andric if (__s) 7610b57cec5SDimitry Andric { 7620b57cec5SDimitry Andric typedef ostreambuf_iterator<_CharT, _Traits> _Ip; 7630b57cec5SDimitry Andric if (__pad_and_output(_Ip(__os), 7640b57cec5SDimitry Andric __str, 7650b57cec5SDimitry Andric (__os.flags() & ios_base::adjustfield) == ios_base::left ? 7660b57cec5SDimitry Andric __str + __len : 7670b57cec5SDimitry Andric __str, 7680b57cec5SDimitry Andric __str + __len, 7690b57cec5SDimitry Andric __os, 7700b57cec5SDimitry Andric __os.fill()).failed()) 7710b57cec5SDimitry Andric __os.setstate(ios_base::badbit | ios_base::failbit); 7720b57cec5SDimitry Andric } 7730b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 7740b57cec5SDimitry Andric } 7750b57cec5SDimitry Andric catch (...) 7760b57cec5SDimitry Andric { 7770b57cec5SDimitry Andric __os.__set_badbit_and_consider_rethrow(); 7780b57cec5SDimitry Andric } 7790b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 7800b57cec5SDimitry Andric return __os; 7810b57cec5SDimitry Andric} 7820b57cec5SDimitry Andric 7830b57cec5SDimitry Andric 7840b57cec5SDimitry Andrictemplate<class _CharT, class _Traits> 7850b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 7860b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, _CharT __c) 7870b57cec5SDimitry Andric{ 7880b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, &__c, 1); 7890b57cec5SDimitry Andric} 7900b57cec5SDimitry Andric 7910b57cec5SDimitry Andrictemplate<class _CharT, class _Traits> 7920b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 7930b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, char __cn) 7940b57cec5SDimitry Andric{ 7950b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 7960b57cec5SDimitry Andric try 7970b57cec5SDimitry Andric { 7980b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 7990b57cec5SDimitry Andric typename basic_ostream<_CharT, _Traits>::sentry __s(__os); 8000b57cec5SDimitry Andric if (__s) 8010b57cec5SDimitry Andric { 8020b57cec5SDimitry Andric _CharT __c = __os.widen(__cn); 8030b57cec5SDimitry Andric typedef ostreambuf_iterator<_CharT, _Traits> _Ip; 8040b57cec5SDimitry Andric if (__pad_and_output(_Ip(__os), 8050b57cec5SDimitry Andric &__c, 8060b57cec5SDimitry Andric (__os.flags() & ios_base::adjustfield) == ios_base::left ? 8070b57cec5SDimitry Andric &__c + 1 : 8080b57cec5SDimitry Andric &__c, 8090b57cec5SDimitry Andric &__c + 1, 8100b57cec5SDimitry Andric __os, 8110b57cec5SDimitry Andric __os.fill()).failed()) 8120b57cec5SDimitry Andric __os.setstate(ios_base::badbit | ios_base::failbit); 8130b57cec5SDimitry Andric } 8140b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 8150b57cec5SDimitry Andric } 8160b57cec5SDimitry Andric catch (...) 8170b57cec5SDimitry Andric { 8180b57cec5SDimitry Andric __os.__set_badbit_and_consider_rethrow(); 8190b57cec5SDimitry Andric } 8200b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 8210b57cec5SDimitry Andric return __os; 8220b57cec5SDimitry Andric} 8230b57cec5SDimitry Andric 8240b57cec5SDimitry Andrictemplate<class _Traits> 8250b57cec5SDimitry Andricbasic_ostream<char, _Traits>& 8260b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, char __c) 8270b57cec5SDimitry Andric{ 8280b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, &__c, 1); 8290b57cec5SDimitry Andric} 8300b57cec5SDimitry Andric 8310b57cec5SDimitry Andrictemplate<class _Traits> 8320b57cec5SDimitry Andricbasic_ostream<char, _Traits>& 8330b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, signed char __c) 8340b57cec5SDimitry Andric{ 8350b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, (char *) &__c, 1); 8360b57cec5SDimitry Andric} 8370b57cec5SDimitry Andric 8380b57cec5SDimitry Andrictemplate<class _Traits> 8390b57cec5SDimitry Andricbasic_ostream<char, _Traits>& 8400b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, unsigned char __c) 8410b57cec5SDimitry Andric{ 8420b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, (char *) &__c, 1); 8430b57cec5SDimitry Andric} 8440b57cec5SDimitry Andric 8450b57cec5SDimitry Andrictemplate<class _CharT, class _Traits> 8460b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 8470b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const _CharT* __str) 8480b57cec5SDimitry Andric{ 8490b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str)); 8500b57cec5SDimitry Andric} 8510b57cec5SDimitry Andric 8520b57cec5SDimitry Andrictemplate<class _CharT, class _Traits> 8530b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 8540b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const char* __strn) 8550b57cec5SDimitry Andric{ 8560b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 8570b57cec5SDimitry Andric try 8580b57cec5SDimitry Andric { 8590b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 8600b57cec5SDimitry Andric typename basic_ostream<_CharT, _Traits>::sentry __s(__os); 8610b57cec5SDimitry Andric if (__s) 8620b57cec5SDimitry Andric { 8630b57cec5SDimitry Andric typedef ostreambuf_iterator<_CharT, _Traits> _Ip; 8640b57cec5SDimitry Andric size_t __len = char_traits<char>::length(__strn); 8650b57cec5SDimitry Andric const int __bs = 100; 8660b57cec5SDimitry Andric _CharT __wbb[__bs]; 8670b57cec5SDimitry Andric _CharT* __wb = __wbb; 8680b57cec5SDimitry Andric unique_ptr<_CharT, void(*)(void*)> __h(0, free); 8690b57cec5SDimitry Andric if (__len > __bs) 8700b57cec5SDimitry Andric { 8710b57cec5SDimitry Andric __wb = (_CharT*)malloc(__len*sizeof(_CharT)); 8720b57cec5SDimitry Andric if (__wb == 0) 8730b57cec5SDimitry Andric __throw_bad_alloc(); 8740b57cec5SDimitry Andric __h.reset(__wb); 8750b57cec5SDimitry Andric } 8760b57cec5SDimitry Andric for (_CharT* __p = __wb; *__strn != '\0'; ++__strn, ++__p) 8770b57cec5SDimitry Andric *__p = __os.widen(*__strn); 8780b57cec5SDimitry Andric if (__pad_and_output(_Ip(__os), 8790b57cec5SDimitry Andric __wb, 8800b57cec5SDimitry Andric (__os.flags() & ios_base::adjustfield) == ios_base::left ? 8810b57cec5SDimitry Andric __wb + __len : 8820b57cec5SDimitry Andric __wb, 8830b57cec5SDimitry Andric __wb + __len, 8840b57cec5SDimitry Andric __os, 8850b57cec5SDimitry Andric __os.fill()).failed()) 8860b57cec5SDimitry Andric __os.setstate(ios_base::badbit | ios_base::failbit); 8870b57cec5SDimitry Andric } 8880b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 8890b57cec5SDimitry Andric } 8900b57cec5SDimitry Andric catch (...) 8910b57cec5SDimitry Andric { 8920b57cec5SDimitry Andric __os.__set_badbit_and_consider_rethrow(); 8930b57cec5SDimitry Andric } 8940b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 8950b57cec5SDimitry Andric return __os; 8960b57cec5SDimitry Andric} 8970b57cec5SDimitry Andric 8980b57cec5SDimitry Andrictemplate<class _Traits> 8990b57cec5SDimitry Andricbasic_ostream<char, _Traits>& 9000b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, const char* __str) 9010b57cec5SDimitry Andric{ 9020b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str)); 9030b57cec5SDimitry Andric} 9040b57cec5SDimitry Andric 9050b57cec5SDimitry Andrictemplate<class _Traits> 9060b57cec5SDimitry Andricbasic_ostream<char, _Traits>& 9070b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, const signed char* __str) 9080b57cec5SDimitry Andric{ 9090b57cec5SDimitry Andric const char *__s = (const char *) __str; 9100b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s)); 9110b57cec5SDimitry Andric} 9120b57cec5SDimitry Andric 9130b57cec5SDimitry Andrictemplate<class _Traits> 9140b57cec5SDimitry Andricbasic_ostream<char, _Traits>& 9150b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, const unsigned char* __str) 9160b57cec5SDimitry Andric{ 9170b57cec5SDimitry Andric const char *__s = (const char *) __str; 9180b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s)); 9190b57cec5SDimitry Andric} 9200b57cec5SDimitry Andric 9210b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 9220b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 9230b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::put(char_type __c) 9240b57cec5SDimitry Andric{ 9250b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 9260b57cec5SDimitry Andric try 9270b57cec5SDimitry Andric { 9280b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 9290b57cec5SDimitry Andric sentry __s(*this); 9300b57cec5SDimitry Andric if (__s) 9310b57cec5SDimitry Andric { 9320b57cec5SDimitry Andric typedef ostreambuf_iterator<_CharT, _Traits> _Op; 9330b57cec5SDimitry Andric _Op __o(*this); 9340b57cec5SDimitry Andric *__o = __c; 9350b57cec5SDimitry Andric if (__o.failed()) 9360b57cec5SDimitry Andric this->setstate(ios_base::badbit); 9370b57cec5SDimitry Andric } 9380b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 9390b57cec5SDimitry Andric } 9400b57cec5SDimitry Andric catch (...) 9410b57cec5SDimitry Andric { 9420b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 9430b57cec5SDimitry Andric } 9440b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 9450b57cec5SDimitry Andric return *this; 9460b57cec5SDimitry Andric} 9470b57cec5SDimitry Andric 9480b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 9490b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 9500b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::write(const char_type* __s, streamsize __n) 9510b57cec5SDimitry Andric{ 9520b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 9530b57cec5SDimitry Andric try 9540b57cec5SDimitry Andric { 9550b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 9560b57cec5SDimitry Andric sentry __sen(*this); 9570b57cec5SDimitry Andric if (__sen && __n) 9580b57cec5SDimitry Andric { 9590b57cec5SDimitry Andric if (this->rdbuf()->sputn(__s, __n) != __n) 9600b57cec5SDimitry Andric this->setstate(ios_base::badbit); 9610b57cec5SDimitry Andric } 9620b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 9630b57cec5SDimitry Andric } 9640b57cec5SDimitry Andric catch (...) 9650b57cec5SDimitry Andric { 9660b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 9670b57cec5SDimitry Andric } 9680b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 9690b57cec5SDimitry Andric return *this; 9700b57cec5SDimitry Andric} 9710b57cec5SDimitry Andric 9720b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 9730b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 9740b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::flush() 9750b57cec5SDimitry Andric{ 9760b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 9770b57cec5SDimitry Andric try 9780b57cec5SDimitry Andric { 9790b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 9800b57cec5SDimitry Andric if (this->rdbuf()) 9810b57cec5SDimitry Andric { 9820b57cec5SDimitry Andric sentry __s(*this); 9830b57cec5SDimitry Andric if (__s) 9840b57cec5SDimitry Andric { 9850b57cec5SDimitry Andric if (this->rdbuf()->pubsync() == -1) 9860b57cec5SDimitry Andric this->setstate(ios_base::badbit); 9870b57cec5SDimitry Andric } 9880b57cec5SDimitry Andric } 9890b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 9900b57cec5SDimitry Andric } 9910b57cec5SDimitry Andric catch (...) 9920b57cec5SDimitry Andric { 9930b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 9940b57cec5SDimitry Andric } 9950b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 9960b57cec5SDimitry Andric return *this; 9970b57cec5SDimitry Andric} 9980b57cec5SDimitry Andric 9990b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 10000b57cec5SDimitry Andrictypename basic_ostream<_CharT, _Traits>::pos_type 10010b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::tellp() 10020b57cec5SDimitry Andric{ 10030b57cec5SDimitry Andric if (this->fail()) 10040b57cec5SDimitry Andric return pos_type(-1); 10050b57cec5SDimitry Andric return this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out); 10060b57cec5SDimitry Andric} 10070b57cec5SDimitry Andric 10080b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 10090b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10100b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::seekp(pos_type __pos) 10110b57cec5SDimitry Andric{ 10120b57cec5SDimitry Andric sentry __s(*this); 10130b57cec5SDimitry Andric if (!this->fail()) 10140b57cec5SDimitry Andric { 10150b57cec5SDimitry Andric if (this->rdbuf()->pubseekpos(__pos, ios_base::out) == pos_type(-1)) 10160b57cec5SDimitry Andric this->setstate(ios_base::failbit); 10170b57cec5SDimitry Andric } 10180b57cec5SDimitry Andric return *this; 10190b57cec5SDimitry Andric} 10200b57cec5SDimitry Andric 10210b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 10220b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10230b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::seekp(off_type __off, ios_base::seekdir __dir) 10240b57cec5SDimitry Andric{ 10250b57cec5SDimitry Andric sentry __s(*this); 10260b57cec5SDimitry Andric if (!this->fail()) 10270b57cec5SDimitry Andric { 10280b57cec5SDimitry Andric if (this->rdbuf()->pubseekoff(__off, __dir, ios_base::out) == pos_type(-1)) 10290b57cec5SDimitry Andric this->setstate(ios_base::failbit); 10300b57cec5SDimitry Andric } 10310b57cec5SDimitry Andric return *this; 10320b57cec5SDimitry Andric} 10330b57cec5SDimitry Andric 10340b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 10355ffd83dbSDimitry Andricinline 10360b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10370b57cec5SDimitry Andricendl(basic_ostream<_CharT, _Traits>& __os) 10380b57cec5SDimitry Andric{ 10390b57cec5SDimitry Andric __os.put(__os.widen('\n')); 10400b57cec5SDimitry Andric __os.flush(); 10410b57cec5SDimitry Andric return __os; 10420b57cec5SDimitry Andric} 10430b57cec5SDimitry Andric 10440b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 10455ffd83dbSDimitry Andricinline 10460b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10470b57cec5SDimitry Andricends(basic_ostream<_CharT, _Traits>& __os) 10480b57cec5SDimitry Andric{ 10490b57cec5SDimitry Andric __os.put(_CharT()); 10500b57cec5SDimitry Andric return __os; 10510b57cec5SDimitry Andric} 10520b57cec5SDimitry Andric 10530b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 10545ffd83dbSDimitry Andricinline 10550b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10560b57cec5SDimitry Andricflush(basic_ostream<_CharT, _Traits>& __os) 10570b57cec5SDimitry Andric{ 10580b57cec5SDimitry Andric __os.flush(); 10590b57cec5SDimitry Andric return __os; 10600b57cec5SDimitry Andric} 10610b57cec5SDimitry Andric 1062e8d8bef9SDimitry Andrictemplate <class _Stream, class _Tp, class = void> 1063e8d8bef9SDimitry Andricstruct __is_ostreamable : false_type { }; 1064e8d8bef9SDimitry Andric 10650b57cec5SDimitry Andrictemplate <class _Stream, class _Tp> 1066e8d8bef9SDimitry Andricstruct __is_ostreamable<_Stream, _Tp, decltype( 1067fe6060f1SDimitry Andric declval<_Stream>() << declval<_Tp>(), void() 1068e8d8bef9SDimitry Andric)> : true_type { }; 1069e8d8bef9SDimitry Andric 1070e8d8bef9SDimitry Andrictemplate <class _Stream, class _Tp, class = typename enable_if< 1071e8d8bef9SDimitry Andric _And<is_base_of<ios_base, _Stream>, 1072e8d8bef9SDimitry Andric __is_ostreamable<_Stream&, const _Tp&> >::value 1073e8d8bef9SDimitry Andric>::type> 1074e8d8bef9SDimitry Andric_LIBCPP_INLINE_VISIBILITY 1075e8d8bef9SDimitry Andric_Stream&& operator<<(_Stream&& __os, const _Tp& __x) 10760b57cec5SDimitry Andric{ 10770b57cec5SDimitry Andric __os << __x; 10780b57cec5SDimitry Andric return _VSTD::move(__os); 10790b57cec5SDimitry Andric} 10800b57cec5SDimitry Andric 10810b57cec5SDimitry Andrictemplate<class _CharT, class _Traits, class _Allocator> 10820b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10830b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, 10840b57cec5SDimitry Andric const basic_string<_CharT, _Traits, _Allocator>& __str) 10850b57cec5SDimitry Andric{ 10860b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, __str.data(), __str.size()); 10870b57cec5SDimitry Andric} 10880b57cec5SDimitry Andric 10890b57cec5SDimitry Andrictemplate<class _CharT, class _Traits> 10900b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10910b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, 1092e40139ffSDimitry Andric basic_string_view<_CharT, _Traits> __sv) 10930b57cec5SDimitry Andric{ 10940b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, __sv.data(), __sv.size()); 10950b57cec5SDimitry Andric} 10960b57cec5SDimitry Andric 10970b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 10980b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 10990b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 11000b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __ec) 11010b57cec5SDimitry Andric{ 11020b57cec5SDimitry Andric return __os << __ec.category().name() << ':' << __ec.value(); 11030b57cec5SDimitry Andric} 11040b57cec5SDimitry Andric 11050b57cec5SDimitry Andrictemplate<class _CharT, class _Traits, class _Yp> 11060b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 11070b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 11080b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, shared_ptr<_Yp> const& __p) 11090b57cec5SDimitry Andric{ 11100b57cec5SDimitry Andric return __os << __p.get(); 11110b57cec5SDimitry Andric} 11120b57cec5SDimitry Andric 11130b57cec5SDimitry Andrictemplate<class _CharT, class _Traits, class _Yp, class _Dp> 11140b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 11150b57cec5SDimitry Andrictypename enable_if 11160b57cec5SDimitry Andric< 11170b57cec5SDimitry Andric is_same<void, typename __void_t<decltype((declval<basic_ostream<_CharT, _Traits>&>() << declval<typename unique_ptr<_Yp, _Dp>::pointer>()))>::type>::value, 11180b57cec5SDimitry Andric basic_ostream<_CharT, _Traits>& 11190b57cec5SDimitry Andric>::type 11200b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, unique_ptr<_Yp, _Dp> const& __p) 11210b57cec5SDimitry Andric{ 11220b57cec5SDimitry Andric return __os << __p.get(); 11230b57cec5SDimitry Andric} 11240b57cec5SDimitry Andric 11250b57cec5SDimitry Andrictemplate <class _CharT, class _Traits, size_t _Size> 11260b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 11270b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const bitset<_Size>& __x) 11280b57cec5SDimitry Andric{ 11290b57cec5SDimitry Andric return __os << __x.template to_string<_CharT, _Traits> 11300b57cec5SDimitry Andric (use_facet<ctype<_CharT> >(__os.getloc()).widen('0'), 11310b57cec5SDimitry Andric use_facet<ctype<_CharT> >(__os.getloc()).widen('1')); 11320b57cec5SDimitry Andric} 11330b57cec5SDimitry Andric 1134*fcaf7f86SDimitry Andric#if _LIBCPP_STD_VER > 17 1135*fcaf7f86SDimitry Andric 1136*fcaf7f86SDimitry Andric#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 1137*fcaf7f86SDimitry Andrictemplate <class _Traits> 1138*fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, wchar_t) = delete; 1139*fcaf7f86SDimitry Andric 1140*fcaf7f86SDimitry Andrictemplate <class _Traits> 1141*fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const wchar_t*) = delete; 1142*fcaf7f86SDimitry Andric 1143*fcaf7f86SDimitry Andrictemplate <class _Traits> 1144*fcaf7f86SDimitry Andricbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, char16_t) = delete; 1145*fcaf7f86SDimitry Andric 1146*fcaf7f86SDimitry Andrictemplate <class _Traits> 1147*fcaf7f86SDimitry Andricbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, char32_t) = delete; 1148*fcaf7f86SDimitry Andric 1149*fcaf7f86SDimitry Andrictemplate <class _Traits> 1150*fcaf7f86SDimitry Andricbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, const char16_t*) = delete; 1151*fcaf7f86SDimitry Andric 1152*fcaf7f86SDimitry Andrictemplate <class _Traits> 1153*fcaf7f86SDimitry Andricbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, const char32_t*) = delete; 1154*fcaf7f86SDimitry Andric 1155*fcaf7f86SDimitry Andric#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS 1156*fcaf7f86SDimitry Andric 1157*fcaf7f86SDimitry Andric#ifndef _LIBCPP_HAS_NO_CHAR8_T 1158*fcaf7f86SDimitry Andrictemplate <class _Traits> 1159*fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, char8_t) = delete; 1160*fcaf7f86SDimitry Andric 1161*fcaf7f86SDimitry Andrictemplate <class _Traits> 1162*fcaf7f86SDimitry Andricbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, char8_t) = delete; 1163*fcaf7f86SDimitry Andric 1164*fcaf7f86SDimitry Andrictemplate <class _Traits> 1165*fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const char8_t*) = delete; 1166*fcaf7f86SDimitry Andric 1167*fcaf7f86SDimitry Andrictemplate <class _Traits> 1168*fcaf7f86SDimitry Andricbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, const char8_t*) = delete; 1169*fcaf7f86SDimitry Andric#endif 1170*fcaf7f86SDimitry Andric 1171*fcaf7f86SDimitry Andrictemplate <class _Traits> 1172*fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, char16_t) = delete; 1173*fcaf7f86SDimitry Andric 1174*fcaf7f86SDimitry Andrictemplate <class _Traits> 1175*fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, char32_t) = delete; 1176*fcaf7f86SDimitry Andric 1177*fcaf7f86SDimitry Andrictemplate <class _Traits> 1178*fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const char16_t*) = delete; 1179*fcaf7f86SDimitry Andric 1180*fcaf7f86SDimitry Andrictemplate <class _Traits> 1181*fcaf7f86SDimitry Andricbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const char32_t*) = delete; 1182*fcaf7f86SDimitry Andric 1183*fcaf7f86SDimitry Andric#endif // _LIBCPP_STD_VER > 17 1184*fcaf7f86SDimitry Andric 118581ad6265SDimitry Andricextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<char>; 1186349cc55cSDimitry Andric#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 118781ad6265SDimitry Andricextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<wchar_t>; 1188349cc55cSDimitry Andric#endif 11890b57cec5SDimitry Andric 11900b57cec5SDimitry Andric_LIBCPP_END_NAMESPACE_STD 11910b57cec5SDimitry Andric 11920b57cec5SDimitry Andric#endif // _LIBCPP_OSTREAM 1193