aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Kosnik <bkoz@redhat.com>2001-06-11 19:20:20 +0000
committerBenjamin Kosnik <bkoz@gcc.gnu.org>2001-06-11 19:20:20 +0000
commitd52a9847833019e4d61a4b2ed2c3dcb144a615b1 (patch)
tree5f88fa75f0de65a7ba5623c98d7af9c8e8d7bb89
parent353e51f8e5da990ea163d43b6ce6c828848f4891 (diff)
downloadgcc-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/ChangeLog14
-rw-r--r--libstdc++-v3/include/bits/istream.tcc13
-rw-r--r--libstdc++-v3/include/bits/ostream.tcc17
-rw-r--r--libstdc++-v3/include/bits/std_queue.h2
-rw-r--r--libstdc++-v3/include/bits/stl_function.h14
-rw-r--r--libstdc++-v3/testsuite/20_util/binders.cc51
-rw-r--r--libstdc++-v3/testsuite/27_io/istream_seeks.cc2
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 );