diff options
author | Benjamin Kosnik <bkoz@redhat.com> | 2001-06-11 19:20:20 +0000 |
---|---|---|
committer | Benjamin Kosnik <bkoz@gcc.gnu.org> | 2001-06-11 19:20:20 +0000 |
commit | d52a9847833019e4d61a4b2ed2c3dcb144a615b1 (patch) | |
tree | 5f88fa75f0de65a7ba5623c98d7af9c8e8d7bb89 | |
parent | 353e51f8e5da990ea163d43b6ce6c828848f4891 (diff) | |
download | gcc-d52a9847833019e4d61a4b2ed2c3dcb144a615b1.zip gcc-d52a9847833019e4d61a4b2ed2c3dcb144a615b1.tar.gz gcc-d52a9847833019e4d61a4b2ed2c3dcb144a615b1.tar.bz2 |
ostream.tcc (ostream::seekp): Add error checking as per DR 129.
2001-06-11 Benjamin Kosnik <bkoz@redhat.com>
libstdc++/3114
* include/bits/ostream.tcc (ostream::seekp): Add error checking as
per DR 129.
* include/bits/istream.tcc (istream::seekg): Same.
* testsuite/27_io/istream_seeks.cc: Fix.
libstdc++/3113
* include/bits/stl_function.h (binder2nd): Fix as per DR 109.
(binder1st): Same.
* include/bits/std_queue.h: Add c++config.h.
* testsuite/20_util/binders.cc: New test.
From-SVN: r43201
-rw-r--r-- | libstdc++-v3/ChangeLog | 14 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/istream.tcc | 13 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/ostream.tcc | 17 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/std_queue.h | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_function.h | 14 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/binders.cc | 51 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/27_io/istream_seeks.cc | 2 |
7 files changed, 107 insertions, 6 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 6a6991b..d21f28f 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,17 @@ +2001-06-11 Benjamin Kosnik <bkoz@redhat.com> + + libstdc++/3114 + * include/bits/ostream.tcc (ostream::seekp): Add error checking as + per DR 129. + * include/bits/istream.tcc (istream::seekg): Same. + * testsuite/27_io/istream_seeks.cc: Fix. + + libstdc++/3113 + * include/bits/stl_function.h (binder2nd): Fix as per DR 109. + (binder1st): Same. + * include/bits/std_queue.h: Add c++config.h. + * testsuite/20_util/binders.cc: New test. + 2001-06-11 Matthias Klose <doko@debian.org> Phil Edwards <pme@sources.redhat.com> diff --git a/libstdc++-v3/include/bits/istream.tcc b/libstdc++-v3/include/bits/istream.tcc index 8132840..e794fe3 100644 --- a/libstdc++-v3/include/bits/istream.tcc +++ b/libstdc++-v3/include/bits/istream.tcc @@ -959,7 +959,11 @@ namespace std { #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS // 136. seekp, seekg setting wrong streams? - this->rdbuf()->pubseekpos(__pos, ios_base::in); + pos_type __err = this->rdbuf()->pubseekpos(__pos, ios_base::in); + +// 129. Need error indication from seekp() and seekg() + if (__err == pos_type(off_type(-1))) + this->setstate(failbit); #endif } catch(exception& __fail) @@ -987,7 +991,12 @@ namespace std { #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS // 136. seekp, seekg setting wrong streams? - this->rdbuf()->pubseekoff(__off, __dir, ios_base::in); + pos_type __err = this->rdbuf()->pubseekoff(__off, __dir, + ios_base::in); + +// 129. Need error indication from seekp() and seekg() + if (__err == pos_type(off_type(-1))) + this->setstate(failbit); #endif } catch(exception& __fail) diff --git a/libstdc++-v3/include/bits/ostream.tcc b/libstdc++-v3/include/bits/ostream.tcc index 60294c3..c3cb5d2 100644 --- a/libstdc++-v3/include/bits/ostream.tcc +++ b/libstdc++-v3/include/bits/ostream.tcc @@ -411,10 +411,16 @@ namespace std bool __testok = this->fail() != true; if (__testok) + { #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS // 136. seekp, seekg setting wrong streams? - this->rdbuf()->pubseekpos(__pos, ios_base::out); + pos_type __err = this->rdbuf()->pubseekpos(__pos, ios_base::out); + +// 129. Need error indication from seekp() and seekg() + if (__err == pos_type(off_type(-1))) + this->setstate(failbit); #endif + } return *this; } @@ -426,9 +432,16 @@ namespace std bool __testok = this->fail() != true; if (__testok) + { #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS // 136. seekp, seekg setting wrong streams? - this->rdbuf()->pubseekoff(__off, __d, ios_base::out); + pos_type __err = this->rdbuf()->pubseekoff(__off, __d, + ios_base::out); + +// 129. Need error indication from seekp() and seekg() + if (__err == pos_type(off_type(-1))) + this->setstate(failbit); + } #endif return *this; } diff --git a/libstdc++-v3/include/bits/std_queue.h b/libstdc++-v3/include/bits/std_queue.h index d726479..b3b80ab 100644 --- a/libstdc++-v3/include/bits/std_queue.h +++ b/libstdc++-v3/include/bits/std_queue.h @@ -28,7 +28,7 @@ #define _CPP_QUEUE 1 #pragma GCC system_header - +#include <bits/c++config.h> #include <bits/stl_algobase.h> #include <bits/stl_alloc.h> #include <bits/stl_construct.h> diff --git a/libstdc++-v3/include/bits/stl_function.h b/libstdc++-v3/include/bits/stl_function.h index 6c26193..43bf932 100644 --- a/libstdc++-v3/include/bits/stl_function.h +++ b/libstdc++-v3/include/bits/stl_function.h @@ -199,6 +199,13 @@ public: operator()(const typename _Operation::second_argument_type& __x) const { return op(value, __x); } +#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS + // 109. Missing binders for non-const sequence elements + typename _Operation::result_type + operator()(typename _Operation::second_argument_type& __x) const { + return op(value, __x); + } +#endif }; template <class _Operation, class _Tp> @@ -224,6 +231,13 @@ public: operator()(const typename _Operation::first_argument_type& __x) const { return op(__x, value); } +#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS + // 109. Missing binders for non-const sequence elements + typename _Operation::result_type + operator()(typename _Operation::first_argument_type& __x) const { + return op(__x, value); + } +#endif }; template <class _Operation, class _Tp> diff --git a/libstdc++-v3/testsuite/20_util/binders.cc b/libstdc++-v3/testsuite/20_util/binders.cc new file mode 100644 index 0000000..6dd45e3 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/binders.cc @@ -0,0 +1,51 @@ +// 2001-06-11 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2001 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 +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 20.3.6 Binders + +#include <vector> +#include <algorithm> // for_each +#include <functional> + +class Elem +{ +public: + void print(int i) const { } + void modify(int i) { } +}; + +// libstdc++/3113 +void test01() +{ + std::vector<Elem> coll(2); + // OK + std::for_each(coll.begin(), coll.end(), + std::bind2nd(std::mem_fun_ref(&Elem::print), 42)); + // OK + std::for_each(coll.begin(), coll.end(), + std::bind2nd(std::mem_fun_ref(&Elem::modify), 42)); +} + + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/27_io/istream_seeks.cc b/libstdc++-v3/testsuite/27_io/istream_seeks.cc index 7b3b891..97ef01b 100644 --- a/libstdc++-v3/testsuite/27_io/istream_seeks.cc +++ b/libstdc++-v3/testsuite/27_io/istream_seeks.cc @@ -249,7 +249,7 @@ void test05(void) state02 = is03.rdstate(); pos05 = is03.tellg(); VERIFY( pos05 == pos06 ); // as only out buffer - VERIFY( state01 == state02 ); + VERIFY( state01 != state02 ); pos06 = is03.tellg(); VERIFY( pos05 == pos06 ); |