master
  1// -*- C++ -*-
  2//===----------------------------------------------------------------------===//
  3//
  4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  5// See https://llvm.org/LICENSE.txt for license information.
  6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  7//
  8//===----------------------------------------------------------------------===//
  9
 10#ifndef _LIBCPP_OSTREAM
 11#define _LIBCPP_OSTREAM
 12
 13/*
 14    ostream synopsis
 15
 16template <class charT, class traits = char_traits<charT> >
 17class basic_ostream
 18    : virtual public basic_ios<charT,traits>
 19{
 20public:
 21    // types (inherited from basic_ios (27.5.4)):
 22    typedef charT                          char_type;
 23    typedef traits                         traits_type;
 24    typedef typename traits_type::int_type int_type;
 25    typedef typename traits_type::pos_type pos_type;
 26    typedef typename traits_type::off_type off_type;
 27
 28    // 27.7.2.2 Constructor/destructor:
 29    explicit basic_ostream(basic_streambuf<char_type,traits>* sb);
 30    basic_ostream(basic_ostream&& rhs);
 31    virtual ~basic_ostream();
 32
 33    // 27.7.2.3 Assign/swap
 34    basic_ostream& operator=(const basic_ostream& rhs) = delete; // C++14
 35    basic_ostream& operator=(basic_ostream&& rhs);
 36    void swap(basic_ostream& rhs);
 37
 38    // 27.7.2.4 Prefix/suffix:
 39    class sentry;
 40
 41    // 27.7.2.6 Formatted output:
 42    basic_ostream& operator<<(basic_ostream& (*pf)(basic_ostream&));
 43    basic_ostream& operator<<(basic_ios<charT, traits>& (*pf)(basic_ios<charT,traits>&));
 44    basic_ostream& operator<<(ios_base& (*pf)(ios_base&));
 45    basic_ostream& operator<<(bool n);
 46    basic_ostream& operator<<(short n);
 47    basic_ostream& operator<<(unsigned short n);
 48    basic_ostream& operator<<(int n);
 49    basic_ostream& operator<<(unsigned int n);
 50    basic_ostream& operator<<(long n);
 51    basic_ostream& operator<<(unsigned long n);
 52    basic_ostream& operator<<(long long n);
 53    basic_ostream& operator<<(unsigned long long n);
 54    basic_ostream& operator<<(float f);
 55    basic_ostream& operator<<(double f);
 56    basic_ostream& operator<<(long double f);
 57    basic_ostream& operator<<(const void* p);
 58    basic_ostream& operator<<(const volatile void* val); // C++23
 59    basic_ostream& operator<<(basic_streambuf<char_type,traits>* sb);
 60    basic_ostream& operator<<(nullptr_t);
 61
 62    // 27.7.2.7 Unformatted output:
 63    basic_ostream& put(char_type c);
 64    basic_ostream& write(const char_type* s, streamsize n);
 65    basic_ostream& flush();
 66
 67    // 27.7.2.5 seeks:
 68    pos_type tellp();
 69    basic_ostream& seekp(pos_type);
 70    basic_ostream& seekp(off_type, ios_base::seekdir);
 71protected:
 72    basic_ostream(const basic_ostream& rhs) = delete;
 73    basic_ostream(basic_ostream&& rhs);
 74    // 27.7.3.3 Assign/swap
 75    basic_ostream& operator=(basic_ostream& rhs) = delete;
 76    basic_ostream& operator=(const basic_ostream&& rhs);
 77    void swap(basic_ostream& rhs);
 78};
 79
 80// 27.7.2.6.4 character inserters
 81
 82template<class charT, class traits>
 83  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, charT);
 84
 85template<class charT, class traits>
 86  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, char);
 87
 88template<class traits>
 89  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, char);
 90
 91// signed and unsigned
 92
 93template<class traits>
 94  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, signed char);
 95
 96template<class traits>
 97  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, unsigned char);
 98
 99// NTBS
100template<class charT, class traits>
101  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const charT*);
102
103template<class charT, class traits>
104  basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const char*);
105
106template<class traits>
107  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const char*);
108
109// signed and unsigned
110template<class traits>
111basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const signed char*);
112
113template<class traits>
114  basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const unsigned char*);
115
116// swap:
117template <class charT, class traits>
118  void swap(basic_ostream<charT, traits>& x, basic_ostream<charT, traits>& y);
119
120template <class charT, class traits>
121  basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
122
123template <class charT, class traits>
124  basic_ostream<charT,traits>& ends(basic_ostream<charT,traits>& os);
125
126template <class charT, class traits>
127  basic_ostream<charT,traits>& flush(basic_ostream<charT,traits>& os);
128
129// rvalue stream insertion
130template <class Stream, class T>
131  Stream&& operator<<(Stream&& os, const T& x);
132
133template<class traits>
134basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, wchar_t) = delete;               // since C++20
135template<class traits>
136basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char8_t) = delete;               // since C++20
137template<class traits>
138basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char16_t) = delete;              // since C++20
139template<class traits>
140basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char32_t) = delete;              // since C++20
141template<class traits>
142basic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char8_t) = delete;         // since C++20
143template<class traits>
144basic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char16_t) = delete;        // since C++20
145template<class traits>
146basic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char32_t) = delete;        // since C++20
147template<class traits>
148basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const wchar_t*) = delete;        // since C++20
149template<class traits>
150basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char8_t*) = delete;        // since C++20
151template<class traits>
152basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char16_t*) = delete;       // since C++20
153template<class traits>
154basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char32_t*) = delete;       // since C++20
155template<class traits>
156basic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char8_t*) = delete;  // since C++20
157template<class traits>
158basic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char16_t*) = delete; // since C++20
159template<class traits>
160basic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char32_t*) = delete; // since C++20
161
162// [ostream.formatted.print], print functions
163template<class... Args>                                                                                // since C++23
164  void print(ostream& os, format_string<Args...> fmt, Args&&... args);
165template<class... Args>                                                                                // since C++23
166  void println(ostream& os, format_string<Args...> fmt, Args&&... args);
167void println(ostream& os);                                                                             // since C++26
168
169void vprint_unicode(ostream& os, string_view fmt, format_args args);                                   // since C++23
170void vprint_nonunicode(ostream& os, string_view fmt, format_args args);                                // since C++23
171}  // std
172
173*/
174
175#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
176#  include <__cxx03/ostream>
177#else
178#  include <__config>
179
180#  if _LIBCPP_HAS_LOCALIZATION
181
182#    include <__ostream/basic_ostream.h>
183
184#    if _LIBCPP_STD_VER >= 23
185#      include <__ostream/print.h>
186#    endif
187
188#    include <version>
189
190#    if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
191#      pragma GCC system_header
192#    endif
193
194#  endif // _LIBCPP_HAS_LOCALIZATION
195
196#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
197#    include <atomic>
198#    include <concepts>
199#    include <cstdio>
200#    include <cstdlib>
201#    include <format>
202#    include <iosfwd>
203#    include <iterator>
204#    include <print>
205#    include <stdexcept>
206#    include <type_traits>
207#  endif
208
209#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
210#    include <locale>
211#  endif
212
213#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
214
215#endif // _LIBCPP_OSTREAM