OSDN Git Service

2001-06-11 Benjamin Kosnik <bkoz@redhat.com>
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 11 Jun 2001 19:20:20 +0000 (19:20 +0000)
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 11 Jun 2001 19:20:20 +0000 (19:20 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43201 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/istream.tcc
libstdc++-v3/include/bits/ostream.tcc
libstdc++-v3/include/bits/std_queue.h
libstdc++-v3/include/bits/stl_function.h
libstdc++-v3/testsuite/20_util/binders.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/istream_seeks.cc

index 6a6991b..d21f28f 100644 (file)
@@ -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>
 
index 8132840..e794fe3 100644 (file)
@@ -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)
index 60294c3..c3cb5d2 100644 (file)
@@ -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;
     }
index d726479..b3b80ab 100644 (file)
@@ -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>
index 6c26193..43bf932 100644 (file)
@@ -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 (file)
index 0000000..6dd45e3
--- /dev/null
@@ -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;
+}
index 7b3b891..97ef01b 100644 (file)
@@ -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 );