From fcf0430bda26a50f1279cb09e8bd8ecfdfa687d6 Mon Sep 17 00:00:00 2001 From: Edward Smith-Rowland <3dw4rd@verizon.net> Date: Thu, 7 Feb 2013 14:27:45 +0000 Subject: [PATCH] PR56193 - Wrong test operator for basic_ios in C++11. From-SVN: r195849 --- libstdc++-v3/ChangeLog | 6 ++++++ libstdc++-v3/include/bits/basic_ios.h | 5 +++++ libstdc++-v3/testsuite/27_io/basic_ios/pr56193.cc | 15 +++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 libstdc++-v3/testsuite/27_io/basic_ios/pr56193.cc 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 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 * if (!a_stream) ... and while (a_stream) ... */ +#if __cplusplus >= 201103L + explicit operator bool() const + { return !this->fail(); } +#else operator void*() const { return this->fail() ? 0 : const_cast(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 + +// PR libstdc++/56193 + +int +test01() +{ + std::cout << std::cout; // { dg-error "cannot bind" } +} + +// { dg-error "initializing argument" "" { target *-*-* } 602 } -- 2.30.2