commit 65eba18bbe122c7e274a81aace7e7290645245c8
Author: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed Sep 24 22:13:35 2014 +0000
PR libstdc++/56193
* config/abi/pre/gnu.ver: Add new exports.
* include/bits/basic_ios.h (basic_ios::operator bool): Define.
* src/c++98/ios_locale.cc (basic_ios::operator void*): Instantiate.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@215571 138bc75d-0d04-0410-961f-82ee72b054a4
@@ -1470,6 +1470,9 @@ GLIBCXX_3.4.21 {
_ZNSoC[12]ERSd;
_ZNSt13basic_ostreamIwSt11char_traitsIwEEC[12]ERSt14basic_iostreamIwS1_E;
+ # std::basic_ios::operator bool() const
+ _ZNKSt9basic_iosI[cw]St11char_traitsI[cw]EEcvbEv;
+
} GLIBCXX_3.4.20;
@@ -113,8 +113,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* 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
@@ -54,5 +54,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __old;
}
+ // Explicit instantiations for basic_ios are done in src/c++11/ios.cc
+ // and so do not include this member, which is only defined for C++98.
+ template basic_ios<char>::operator void*() const;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ template basic_ios<wchar_t>::operator void*() const;
+#endif
+
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace