blob: a58ac9b944fa2c52ce112dfbfe1f05a36dacb0b2 [file] [log] [blame]
Howard Hinnanted395bf2010-05-11 19:42:16 +00001// -*- C++ -*-
Louis Dionne791ef7b2021-11-17 16:25:01 -05002//===----------------------------------------------------------------------===//
Howard Hinnanted395bf2010-05-11 19:42:16 +00003//
Chandler Carruth41d7aea2019-01-19 10:56:40 +00004// 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
Howard Hinnanted395bf2010-05-11 19:42:16 +00007//
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
Marshall Clow21e74852013-08-14 15:15:28 +000034 basic_ostream& operator=(const basic_ostream& rhs) = delete; // C++14
Howard Hinnanted395bf2010-05-11 19:42:16 +000035 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);
Nikolas Klauser02c0f162021-11-09 11:41:46 -050058 basic_ostream& operator<<(const volatile void* val); // C++23
Howard Hinnanted395bf2010-05-11 19:42:16 +000059 basic_ostream& operator<<(basic_streambuf<char_type,traits>* sb);
Marshall Clow27e2e6a2019-07-01 16:20:25 +000060 basic_ostream& operator<<(nullptr_t);
Howard Hinnanted395bf2010-05-11 19:42:16 +000061
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);
Marshall Clow1e0ab2e2014-09-16 15:27:01 +000071protected:
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);
Howard Hinnanted395bf2010-05-11 19:42:16 +000078};
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
Louis Dionned83b3f12020-09-23 08:49:00 -0400130template <class Stream, class T>
131 Stream&& operator<<(Stream&& os, const T& x);
Howard Hinnanted395bf2010-05-11 19:42:16 +0000132
Nikolas Klauserd8d4ce52022-07-19 02:03:10 +0200133template<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
Mark de Wever79936872023-12-19 19:32:17 +0100162// [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);
Hristo Hristove43499c2024-04-06 21:52:52 +0300167void println(ostream& os); // since C++26
Mark de Wever79936872023-12-19 19:32:17 +0100168
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
Howard Hinnanted395bf2010-05-11 19:42:16 +0000171} // std
172
173*/
174
Howard Hinnanted395bf2010-05-11 19:42:16 +0000175#include <__config>
Nikolas Klauser95483d72024-07-18 10:59:58 +0200176
Nikolas Klauser9b2b38b2024-11-06 10:39:19 +0100177#if _LIBCPP_HAS_LOCALIZATION
Nikolas Klauser95483d72024-07-18 10:59:58 +0200178
Louis Dionne166e4942024-09-16 08:15:38 -0400179# include <__ostream/basic_ostream.h>
Nikolas Klauser95483d72024-07-18 10:59:58 +0200180
Louis Dionne166e4942024-09-16 08:15:38 -0400181# if _LIBCPP_STD_VER >= 23
182# include <__ostream/print.h>
183# endif
Howard Hinnanted395bf2010-05-11 19:42:16 +0000184
Louis Dionne166e4942024-09-16 08:15:38 -0400185# include <version>
186
187# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
188# pragma GCC system_header
189# endif
190
Nikolas Klauser9b2b38b2024-11-06 10:39:19 +0100191#endif // _LIBCPP_HAS_LOCALIZATION
Howard Hinnanted395bf2010-05-11 19:42:16 +0000192
Mark de Wever7961c222022-09-02 17:53:28 +0200193#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
Nikolas Klauserf83f5f32023-01-31 19:23:30 +0100194# include <atomic>
Nikolas Klauser571b4492022-09-22 21:53:13 +0200195# include <concepts>
Nikolas Klauser3b5a2ea2024-05-02 22:38:44 +0200196# include <cstdio>
Nikolas Klauser1503ae62023-01-08 16:47:53 +0100197# include <cstdlib>
Nikolas Klauser95483d72024-07-18 10:59:58 +0200198# include <format>
philnik777cf4fd932023-10-29 18:31:37 +0100199# include <iosfwd>
Mark de Wever7961c222022-09-02 17:53:28 +0200200# include <iterator>
Nikolas Klauser95483d72024-07-18 10:59:58 +0200201# include <print>
philnik777cf4fd932023-10-29 18:31:37 +0100202# include <stdexcept>
Nikolas Klauser2aa253f2022-12-21 00:07:17 +0100203# include <type_traits>
Mark de Wever7961c222022-09-02 17:53:28 +0200204#endif
205
Louis Dionne8460cc42021-04-20 12:03:32 -0400206#endif // _LIBCPP_OSTREAM