PR56193 - Wrong test operator for basic_ios in C++11.
authorEdward Smith-Rowland <3dw4rd@verizon.net>
Thu, 7 Feb 2013 14:27:45 +0000 (14:27 +0000)
committerEdward Smith-Rowland <emsr@gcc.gnu.org>
Thu, 7 Feb 2013 14:27:45 +0000 (14:27 +0000)
From-SVN: r195849

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/basic_ios.h
libstdc++-v3/testsuite/27_io/basic_ios/pr56193.cc [new file with mode: 0644]

index a898d7773728ed618d310191ac94390761646dae..3cc1eec2b11b311d5541d60b87a3d4c6750f31ed 100644 (file)
@@ -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
index b78b464ba02d4ee2ac4a4d469fcfa4f0e4261c04..bda40f0a7a342ba0c3bcd8c187d638b57d9ac744 100644 (file)
@@ -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 (file)
index 0000000..48c9582
--- /dev/null
@@ -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 }