// Iostreams base classes -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010, 2011
-// Free Software Foundation, Inc.
+// Copyright (C) 1997-2017 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <bits/locale_classes.h>
#include <bits/locale_facets.h>
#include <bits/streambuf_iterator.h>
+#include <bits/move.h>
-_GLIBCXX_BEGIN_NAMESPACE(std)
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Facet>
inline const _Facet&
return *__f;
}
- // 27.4.5 Template class basic_ios
/**
- * @brief Virtual base class for all stream classes.
+ * @brief Template class basic_ios, virtual base class for all
+ * stream classes.
* @ingroup io
*
+ * @tparam _CharT Type of character stream.
+ * @tparam _Traits Traits for character type, defaults to
+ * char_traits<_CharT>.
+ *
* Most of the member functions called dispatched on stream objects
* (e.g., @c std::cout.foo(bar);) are consolidated in this class.
*/
//@{
/**
* These are standard types. They permit a standardized way of
- * referring to names of (or names dependant on) the template
+ * referring to names of (or names dependent on) the template
* parameters, which are specific to the implementation.
*/
typedef _CharT char_type;
* This allows you to write constructs such as
* <code>if (!a_stream) ...</code> and <code>while (a_stream) ...</code>
*/
+#if __cplusplus >= 201103L
+ explicit operator bool() const
+ { return !this->fail(); }
+#else
operator void*() const
{ return this->fail() ? 0 : const_cast<basic_ios*>(this); }
+#endif
bool
operator!() const
/**
* @brief [Re]sets the error state.
- * @param state The new state flag(s) to set.
+ * @param __state The new state flag(s) to set.
*
* See std::ios_base::iostate for the possible bit values. Most
* users will not need to pass an argument.
/**
* @brief Sets additional flags in the error state.
- * @param state The additional state flag(s) to set.
+ * @param __state The additional state flag(s) to set.
*
* See std::ios_base::iostate for the possible bit values.
*/
/**
* @brief Throwing exceptions on errors.
- * @param except The new exceptions mask.
+ * @param __except The new exceptions mask.
*
* By default, error flags are set silently. You can set an
* exceptions mask for each stream; if a bit in the mask becomes set
/**
* @brief Ties this stream to an output stream.
- * @param tiestr The output stream.
+ * @param __tiestr The output stream.
* @return The previously tied output stream, or NULL if the stream
* was not tied.
*
/**
* @brief Changing the underlying buffer.
- * @param sb The new stream buffer.
+ * @param __sb The new stream buffer.
* @return The previous stream buffer.
*
* Associates a new buffer with the current stream, and clears the
/**
* @brief Sets a new @a empty character.
- * @param ch The new character.
+ * @param __ch The new character.
* @return The previous fill character.
*
* The fill character is used to fill out space when P+ characters
// Locales:
/**
* @brief Moves to a new locale.
- * @param loc The new locale.
+ * @param __loc The new locale.
* @return The previous locale.
*
* Calls @c ios_base::imbue(loc), and if a stream buffer is associated
/**
* @brief Squeezes characters.
- * @param c The character to narrow.
- * @param dfault The character to narrow.
+ * @param __c The character to narrow.
+ * @param __dfault The character to narrow.
* @return The narrowed character.
*
* Maps a character of @c char_type to a character of @c char,
/**
* @brief Widens characters.
- * @param c The character to widen.
+ * @param __c The character to widen.
* @return The widened character.
*
* Maps a character of @c char to a character of @c char_type.
void
init(basic_streambuf<_CharT, _Traits>* __sb);
+#if __cplusplus >= 201103L
+ basic_ios(const basic_ios&) = delete;
+ basic_ios& operator=(const basic_ios&) = delete;
+
+ void
+ move(basic_ios& __rhs)
+ {
+ ios_base::_M_move(__rhs);
+ _M_cache_locale(_M_ios_locale);
+ this->tie(__rhs.tie(nullptr));
+ _M_fill = __rhs._M_fill;
+ _M_fill_init = __rhs._M_fill_init;
+ _M_streambuf = nullptr;
+ }
+
+ void
+ move(basic_ios&& __rhs)
+ { this->move(__rhs); }
+
+ void
+ swap(basic_ios& __rhs) noexcept
+ {
+ ios_base::_M_swap(__rhs);
+ _M_cache_locale(_M_ios_locale);
+ __rhs._M_cache_locale(__rhs._M_ios_locale);
+ std::swap(_M_tie, __rhs._M_tie);
+ std::swap(_M_fill, __rhs._M_fill);
+ std::swap(_M_fill_init, __rhs._M_fill_init);
+ }
+
+ void
+ set_rdbuf(basic_streambuf<_CharT, _Traits>* __sb)
+ { _M_streambuf = __sb; }
+#endif
+
void
_M_cache_locale(const locale& __loc);
};
-_GLIBCXX_END_NAMESPACE
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
#include <bits/basic_ios.tcc>