Boost.Nowide
iostream.hpp
1 //
2 // Copyright (c) 2012 Artyom Beilis (Tonkikh)
3 // Copyright (c) 2020 Alexander Grund
4 //
5 // Distributed under the Boost Software License, Version 1.0. (See
6 // accompanying file LICENSE or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
8 //
9 #ifndef BOOST_NOWIDE_IOSTREAM_HPP_INCLUDED
10 #define BOOST_NOWIDE_IOSTREAM_HPP_INCLUDED
11 
12 #include <boost/nowide/config.hpp>
13 #ifdef BOOST_WINDOWS
14 #include <istream>
15 #include <memory>
16 #include <ostream>
17 
18 #include <boost/config/abi_prefix.hpp> // must be the last #include
19 #else
20 #include <iostream>
21 #endif
22 
23 #ifdef BOOST_MSVC
24 #pragma warning(push)
25 #pragma warning(disable : 4251)
26 #endif
27 
28 namespace boost {
29 namespace nowide {
30 #if !defined(BOOST_WINDOWS) && !defined(BOOST_NOWIDE_DOXYGEN)
31  using std::cout;
32  using std::cerr;
33  using std::cin;
34  using std::clog;
35 #else
36 
38  namespace detail {
39  class console_output_buffer;
40  class console_input_buffer;
41 
42  class BOOST_NOWIDE_DECL winconsole_ostream : public std::ostream
43  {
44  public:
45  winconsole_ostream(int fd, winconsole_ostream* tieStream);
46  ~winconsole_ostream();
47 
48  private:
49  std::unique_ptr<console_output_buffer> d;
50  };
51 
52  class BOOST_NOWIDE_DECL winconsole_istream : public std::istream
53  {
54  public:
55  explicit winconsole_istream(winconsole_ostream* tieStream);
56  ~winconsole_istream();
57 
58  private:
59  std::unique_ptr<console_input_buffer> d;
60  };
61  } // namespace detail
62 
64 
70  extern BOOST_NOWIDE_DECL detail::winconsole_istream cin;
76  extern BOOST_NOWIDE_DECL detail::winconsole_ostream cout;
82  extern BOOST_NOWIDE_DECL detail::winconsole_ostream cerr;
88  extern BOOST_NOWIDE_DECL detail::winconsole_ostream clog;
89 
90 #endif
91 
92 } // namespace nowide
93 } // namespace boost
94 
95 #ifdef BOOST_MSVC
96 #pragma warning(pop)
97 #endif
98 
99 #ifdef BOOST_WINDOWS
100 #include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
101 #endif
102 
103 #endif
detail::winconsole_istream cin
Same as std::cin, but uses UTF-8.
detail::winconsole_ostream cout
Same as std::cout, but uses UTF-8.
detail::winconsole_ostream cerr
Same as std::cerr, but uses UTF-8.
detail::winconsole_ostream clog
Same as std::clog, but uses UTF-8.