summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authoremsr <emsr@138bc75d-0d04-0410-961f-82ee72b054a4>2013-02-07 14:27:45 +0000
committeremsr <emsr@138bc75d-0d04-0410-961f-82ee72b054a4>2013-02-07 14:27:45 +0000
commit9d8eb68081f898e225727d69da8212813f27e199 (patch)
tree8b380f6dd04c8f86fff867df6b7476c0aafed0a1 /libstdc++-v3
parente8a419974488ebb2940c2cfa559261a655a53a2d (diff)
downloadgcc-9d8eb68081f898e225727d69da8212813f27e199.tar.gz
PR56193 - Wrong test operator for basic_ios in C++11.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@195849 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/include/bits/basic_ios.h5
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ios/pr56193.cc15
3 files changed, 26 insertions, 0 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index a898d777372..3cc1eec2b11 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,9 @@
+2013-02-06 Edward Smith-Rowland <3dw4rd@verizon.net>
+
+ * include/bits/basic_ios.h: Replace operator void*() const
+ with explicit operator bool() const in C++11 and greater.
+ * testsuite/27_io/basic_ios/pr56193.cc: New file.
+
2013-02-04 Dodji Seketeli <dodji@redhat.com>
Add missing explicit instantiation for std::lower_bound template
diff --git a/libstdc++-v3/include/bits/basic_ios.h b/libstdc++-v3/include/bits/basic_ios.h
index b78b464ba02..bda40f0a7a3 100644
--- a/libstdc++-v3/include/bits/basic_ios.h
+++ b/libstdc++-v3/include/bits/basic_ios.h
@@ -112,8 +112,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
diff --git a/libstdc++-v3/testsuite/27_io/basic_ios/pr56193.cc b/libstdc++-v3/testsuite/27_io/basic_ios/pr56193.cc
new file mode 100644
index 00000000000..48c95829f9e
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_ios/pr56193.cc
@@ -0,0 +1,15 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++11" }
+// Copyright (C) 2013 Free Software Foundation, Inc.
+
+#include <iostream>
+
+// PR libstdc++/56193
+
+int
+test01()
+{
+ std::cout << std::cout; // { dg-error "cannot bind" }
+}
+
+// { dg-error "initializing argument" "" { target *-*-* } 602 }