summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorMarc Espie <espie@cvs.openbsd.org>2000-06-05 22:23:47 +0000
committerMarc Espie <espie@cvs.openbsd.org>2000-06-05 22:23:47 +0000
commit4b8bb462dc50037b8a2d3748769841c6fb66c7bc (patch)
tree96312b17e2fd9995bb136adef1f065f367341c7b /gnu
parentbc01f7371c47d797fb0aaff6be8286e934d81e0a (diff)
Synch with 2.95.3 (pre-rel)
Diffstat (limited to 'gnu')
-rw-r--r--gnu/egcs/libio/ChangeLog18
-rw-r--r--gnu/egcs/libio/dbz/dbzmain.c2
-rw-r--r--gnu/egcs/libio/dbz/fake.c2
-rw-r--r--gnu/egcs/libio/filebuf.cc16
-rw-r--r--gnu/egcs/libio/fstream.h10
-rw-r--r--gnu/egcs/libio/stream.h4
-rw-r--r--gnu/egcs/libio/strstream.h6
-rw-r--r--gnu/egcs/libstdc++/ChangeLog36
-rw-r--r--gnu/egcs/libstdc++/Makefile.in3
-rw-r--r--gnu/egcs/libstdc++/sstream225
-rw-r--r--gnu/egcs/libstdc++/std/bastring.cc10
-rw-r--r--gnu/egcs/libstdc++/std/bastring.h11
-rw-r--r--gnu/egcs/libstdc++/std/complext.cc2
-rw-r--r--gnu/egcs/libstdc++/std/valarray_array.h2
-rw-r--r--gnu/egcs/libstdc++/stl/ChangeLog5
-rw-r--r--gnu/egcs/libstdc++/stl/bitset3
16 files changed, 327 insertions, 28 deletions
diff --git a/gnu/egcs/libio/ChangeLog b/gnu/egcs/libio/ChangeLog
index 832051adf64..d78e5056a4e 100644
--- a/gnu/egcs/libio/ChangeLog
+++ b/gnu/egcs/libio/ChangeLog
@@ -1,3 +1,21 @@
+2000-01-28 Martin v. Löwis <loewis@informatik.hu-berlin.de>
+
+ * fstream.h (ifstream::ifstream): Add ios::in to mode.
+ (ifstream::open): Likewise.
+ (ofstream::ofstream): Add ios::out to mode.
+ (ofstream::open): Likewise.
+
+1999-12-21 Martin v. Löwis <loewis@informatik.hu-berlin.de>
+
+ * filebuf.cc (open): Support ios::ate if _G_HAVE_IO_FILE_OPEN.
+ Remove seek for ios::app if not.
+
+1999-12-14 Martin v. Löwis <loewis@informatik.hu-berlin.de>
+
+ * strstream.h (strstreambuf::streambuf): Rename parameters to
+ avoid shadow warning.
+ * stream.h (WS): Likewise.
+
Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
* gcc-2.95.2 Released.
diff --git a/gnu/egcs/libio/dbz/dbzmain.c b/gnu/egcs/libio/dbz/dbzmain.c
index 887538a57dc..d6b92e86486 100644
--- a/gnu/egcs/libio/dbz/dbzmain.c
+++ b/gnu/egcs/libio/dbz/dbzmain.c
@@ -19,7 +19,7 @@
#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)
#ifndef lint
-static char RCSid[] = "$Header: /cvs/OpenBSD/src/gnu/egcs/libio/dbz/dbzmain.c,v 1.1.1.2 1999/08/23 20:32:04 espie Exp $";
+static char RCSid[] = "$Header: /cvs/OpenBSD/src/gnu/egcs/libio/dbz/dbzmain.c,v 1.1.1.3 2000/06/05 22:23:28 espie Exp $";
#endif
char *progname;
diff --git a/gnu/egcs/libio/dbz/fake.c b/gnu/egcs/libio/dbz/fake.c
index 9f86a178c3f..9d07951f034 100644
--- a/gnu/egcs/libio/dbz/fake.c
+++ b/gnu/egcs/libio/dbz/fake.c
@@ -13,7 +13,7 @@
#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)
#ifndef lint
-static char RCSid[] = "$Header: /cvs/OpenBSD/src/gnu/egcs/libio/dbz/fake.c,v 1.1.1.2 1999/08/23 20:32:04 espie Exp $";
+static char RCSid[] = "$Header: /cvs/OpenBSD/src/gnu/egcs/libio/dbz/fake.c,v 1.1.1.3 2000/06/05 22:23:29 espie Exp $";
#endif
int midonly = 0; /* just message ids, rest not realistic */
diff --git a/gnu/egcs/libio/filebuf.cc b/gnu/egcs/libio/filebuf.cc
index 422d442736e..0b0fd6d88d3 100644
--- a/gnu/egcs/libio/filebuf.cc
+++ b/gnu/egcs/libio/filebuf.cc
@@ -1,5 +1,5 @@
/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993, 1995 Free Software Foundation
+Copyright (C) 1993, 1995, 1999 Free Software Foundation
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
@@ -112,15 +112,23 @@ filebuf* filebuf::open(const char *filename, ios::openmode mode, int prot)
if (mode & (int)ios::noreplace)
posix_mode |= O_EXCL;
#if _G_HAVE_IO_FILE_OPEN
- return (filebuf*)_IO_file_open (this, filename, posix_mode, prot,
- read_write, 0);
+ if (!_IO_file_open (this, filename, posix_mode, prot,
+ read_write, 0))
+ return NULL;
+ if (mode & ios::ate) {
+ if (pubseekoff(0, ios::end) == EOF) {
+ _IO_un_link (this);
+ return NULL;
+ }
+ }
+ return this;
#else
int fd = ::open(filename, posix_mode, prot);
if (fd < 0)
return NULL;
_fileno = fd;
xsetflags(read_write, _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
- if (mode & (ios::ate|ios::app)) {
+ if (mode & ios::ate) {
if (pubseekoff(0, ios::end) == EOF)
return NULL;
}
diff --git a/gnu/egcs/libio/fstream.h b/gnu/egcs/libio/fstream.h
index ea98f5caed0..b5f6598538f 100644
--- a/gnu/egcs/libio/fstream.h
+++ b/gnu/egcs/libio/fstream.h
@@ -1,5 +1,5 @@
/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
+Copyright (C) 1993, 2000 Free Software Foundation
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
@@ -62,9 +62,9 @@ class ifstream : public fstreambase, public istream {
ifstream(int fd) : fstreambase(fd) { }
ifstream(int fd, char *p, int l) : fstreambase(fd, p, l) { } /*Deprecated*/
ifstream(const char *name, int mode=ios::in, int prot=0664)
- : fstreambase(name, mode, prot) { }
+ : fstreambase(name, mode | ios::in, prot) { }
void open(const char *name, int mode=ios::in, int prot=0664)
- { fstreambase::open(name, mode, prot); }
+ { fstreambase::open(name, mode | ios::in, prot); }
};
class ofstream : public fstreambase, public ostream {
@@ -73,9 +73,9 @@ class ofstream : public fstreambase, public ostream {
ofstream(int fd) : fstreambase(fd) { }
ofstream(int fd, char *p, int l) : fstreambase(fd, p, l) { } /*Deprecated*/
ofstream(const char *name, int mode=ios::out, int prot=0664)
- : fstreambase(name, mode, prot) { }
+ : fstreambase(name, mode | ios::out, prot) { }
void open(const char *name, int mode=ios::out, int prot=0664)
- { fstreambase::open(name, mode, prot); }
+ { fstreambase::open(name, mode | ios::out, prot); }
};
class fstream : public fstreambase, public iostream {
diff --git a/gnu/egcs/libio/stream.h b/gnu/egcs/libio/stream.h
index 0859802ade6..90f8c1f2781 100644
--- a/gnu/egcs/libio/stream.h
+++ b/gnu/egcs/libio/stream.h
@@ -1,5 +1,5 @@
/*
-Copyright (C) 1993 Free Software Foundation
+Copyright (C) 1993, 1999 Free Software Foundation
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
@@ -53,7 +53,7 @@ extern char* oct(unsigned int, int=0);
char* chr(char ch, int width = 0);
char* str(const char* s, int width = 0);
-inline istream& WS(istream& str) { return ws(str); }
+inline istream& WS(istream& __str) { return ws(__str); }
} // extern "C++"
#endif /* !_COMPAT_STREAM_H */
diff --git a/gnu/egcs/libio/strstream.h b/gnu/egcs/libio/strstream.h
index d549b454758..967e5b0b76a 100644
--- a/gnu/egcs/libio/strstream.h
+++ b/gnu/egcs/libio/strstream.h
@@ -1,5 +1,5 @@
/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
+Copyright (C) 1993, 1999 Free Software Foundation
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
@@ -50,8 +50,8 @@ class strstreambuf : public streambuf
virtual ~strstreambuf();
strstreambuf() { init_dynamic(0, 0); }
strstreambuf(int initial_size) { init_dynamic(0, 0, initial_size); }
- strstreambuf(void *(*alloc)(_IO_size_t), void (*free)(void*))
- { init_dynamic(alloc, free); }
+ strstreambuf(void *(*__alloc)(_IO_size_t), void (*__free)(void*))
+ { init_dynamic(__alloc, __free); }
strstreambuf(char *ptr, int size, char *pstart = NULL)
{ init_static(ptr, size, pstart); }
strstreambuf(unsigned char *ptr, int size, unsigned char *pstart = NULL)
diff --git a/gnu/egcs/libstdc++/ChangeLog b/gnu/egcs/libstdc++/ChangeLog
index 462049b1324..f0e953012b6 100644
--- a/gnu/egcs/libstdc++/ChangeLog
+++ b/gnu/egcs/libstdc++/ChangeLog
@@ -1,3 +1,39 @@
+2000-04-24 Magnus Fromreide <magfr@lysator.liu.se>
+
+ * sstream: New file.
+ * Makefile.in (HEADERS): Add it.
+
+2000-03-12 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr>
+
+ * std/bastring.h (basic_string<>::push_back): Define.
+
+Tue Mar 7 21:37:56 2000 Jeffrey A Law (law@cygnus.com)
+
+ 1999-11-19 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr>
+ * std/valarray_meta.h (_DEFINE_EXPR_UNARY_FUNCTION): Don't forget
+ to define tanh.
+
+ 1999-11-05 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr>
+ * std/valarray_meta.h (_DEFINE_EXPR_UNARY_FUNCTION): When
+ building meta-expressions don't forget to take the contained
+ closures.
+
+ 1999-10-19 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr>
+ * std/valarray_meta.h: (_BinClos::_BinClos): Fix typo.
+
+ 1999-09-17 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr>
+ * std/complext.cc (pow): Don't expect floating point promotion
+ in presence of template argument deduction. There is no such
+ thing.
+
+2000-02-06 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr>
+ * std/valarray_array.h (__valarray_copy): Fix typo.
+
+1999-12-14 Martin v. Löwis <loewis@informatik.hu-berlin.de>
+ * std/bastring.h (basic_string::basic_string): Rename parameters
+ to avoid shadow warnings.
+ * std/bastring.cc (alloc): Likewise.
+
Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
* gcc-2.95.2 Released.
diff --git a/gnu/egcs/libstdc++/Makefile.in b/gnu/egcs/libstdc++/Makefile.in
index eb9ec77412c..f13eddcf294 100644
--- a/gnu/egcs/libstdc++/Makefile.in
+++ b/gnu/egcs/libstdc++/Makefile.in
@@ -28,7 +28,8 @@ HEADERS= cassert cctype cerrno cfloat ciso646 climits clocale cmath complex \
cwchar cwctype string stdexcept \
algorithm deque functional hash_map hash_set iterator list map \
memory numeric pthread_alloc queue rope set slist stack utility \
- vector fstream iomanip iostream strstream iosfwd bitset valarray
+ vector fstream iomanip iostream strstream iosfwd bitset valarray \
+ sstream
ARLIB = libstdc++.a.$(VERSION)
ARLINK = libstdc++.a
diff --git a/gnu/egcs/libstdc++/sstream b/gnu/egcs/libstdc++/sstream
new file mode 100644
index 00000000000..714be717e50
--- /dev/null
+++ b/gnu/egcs/libstdc++/sstream
@@ -0,0 +1,225 @@
+/* This is part of libio/iostream, providing -*- C++ -*- input/output.
+Copyright (C) 2000 Free Software Foundation
+
+This file is part of the GNU IO 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.
+
+As a special exception, if you link this library with files
+compiled with a GNU compiler to produce an executable, this does not cause
+the resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why
+the executable file might be covered by the GNU General Public License. */
+
+/* Written by Magnus Fromreide (magfr@lysator.liu.se). */
+
+#ifndef __SSTREAM__
+#define __SSTREAM__
+
+#include <string>
+#include <iostream.h>
+#include <streambuf.h>
+
+namespace std
+{
+ class stringbuf : public streambuf
+ {
+ public:
+ typedef char char_type;
+ typedef int int_type;
+ typedef streampos pos_type;
+ typedef streamoff off_type;
+
+ explicit stringbuf(int which=ios::in|ios::out) :
+ streambuf(which), buf(), mode(static_cast<ios::open_mode>(which)),
+ rpos(0), bufsize(1)
+ { }
+
+ explicit stringbuf(const std::string &s, int which=ios::in|ios::out) :
+ streambuf(which), buf(s), mode(static_cast<ios::open_mode>(which)),
+ bufsize(1)
+ {
+ if(mode & ios::in)
+ {
+ setg(&defbuf, &defbuf + bufsize, &defbuf + bufsize);
+ }
+ if(mode & ios::out)
+ {
+ setp(&defbuf, &defbuf + bufsize);
+ }
+ rpos = (mode & ios::ate ? s.size() : 0);
+ }
+
+ std::string str() const
+ {
+ const_cast<stringbuf*>(this)->sync(); // Sigh, really ugly hack
+ return buf;
+ };
+
+ void str(const std::string& s)
+ {
+ buf = s;
+ if(mode & ios::in)
+ {
+ gbump(egptr() - gptr());
+ }
+ if(mode & ios::out)
+ {
+ pbump(pbase() - pptr());
+ }
+ rpos = (mode & ios::ate ? s.size() : 0);
+ }
+
+ protected:
+ inline virtual int sync();
+ inline virtual int overflow(int = EOF);
+ inline virtual int underflow();
+ private:
+ std::string buf;
+ ios::open_mode mode;
+ std::string::size_type rpos;
+ streamsize bufsize;
+ char defbuf;
+ };
+
+ class stringstreambase : virtual public ios {
+ protected:
+ stringbuf __my_sb;
+ public:
+ std::string str() const
+ {
+ return dynamic_cast<stringbuf*>(_strbuf)->str();
+ }
+ void str(const std::string& s)
+ {
+ clear();
+ dynamic_cast<stringbuf*>(_strbuf)->str(s);
+ }
+
+ stringbuf* rdbuf()
+ {
+ return &__my_sb;
+ }
+ protected:
+ stringstreambase(int which) :
+ __my_sb(which)
+ {
+ init (&__my_sb);
+ }
+
+ stringstreambase(const std::string& s, int which) :
+ __my_sb(s, which)
+ {
+ init (&__my_sb);
+ }
+ };
+
+ class istringstream : public stringstreambase, public istream {
+ public:
+ istringstream(int which=ios::in) :
+ stringstreambase(which)
+ { }
+
+ istringstream(const std::string& s, int which=ios::in) :
+ stringstreambase(s, which)
+ { }
+ };
+
+ class ostringstream : public stringstreambase, public ostream {
+ public:
+ ostringstream(int which=ios::out) :
+ stringstreambase(which)
+ { }
+
+ ostringstream(const std::string& s, int which=ios::out) :
+ stringstreambase(s, which)
+ { }
+ };
+
+ class stringstream : public stringstreambase, public iostream {
+ public:
+ stringstream(int which=ios::in|ios::out) :
+ stringstreambase(which)
+ { }
+
+ stringstream(const std::string &s, int which=ios::in|ios::out) :
+ stringstreambase(s, which)
+ { }
+ };
+}
+
+inline int std::stringbuf::sync()
+{
+ if((mode & ios::out) == 0)
+ return EOF;
+
+ streamsize n = pptr() - pbase();
+ if(n)
+ {
+ buf.replace(rpos, std::string::npos, pbase(), n);
+ if(buf.size() - rpos != n)
+ return EOF;
+ rpos += n;
+ pbump(-n);
+ gbump(egptr() - gptr());
+ }
+ return 0;
+}
+
+inline int std::stringbuf::overflow(int ch)
+{
+ if((mode & ios::out) == 0)
+ return EOF;
+
+ streamsize n = pptr() - pbase();
+
+ if(n && sync())
+ return EOF;
+
+ if(ch != EOF)
+ {
+ std::string::size_type oldSize = buf.size();
+
+ buf.replace(rpos, std::string::npos, ch);
+ if(buf.size() - oldSize != 1)
+ return EOF;
+ ++rpos;
+ }
+ return 0;
+}
+
+inline int std::stringbuf::underflow()
+{
+ sync();
+ if((mode & ios::in) == 0)
+ {
+ return EOF;
+ }
+ if(rpos >= buf.size())
+ {
+ return EOF;
+ }
+
+ std::string::size_type n = egptr() - eback();
+ std::string::size_type s;
+
+ s = buf.copy(eback(), n, rpos);
+ pbump(pbase() - pptr());
+ gbump(eback() - gptr());
+ int res = (0377 & buf[rpos]);
+ rpos += s;
+ return res;
+}
+
+#endif /* not __STRSTREAM__ */
diff --git a/gnu/egcs/libstdc++/std/bastring.cc b/gnu/egcs/libstdc++/std/bastring.cc
index 3093b9e129d..f86f6d30157 100644
--- a/gnu/egcs/libstdc++/std/bastring.cc
+++ b/gnu/egcs/libstdc++/std/bastring.cc
@@ -1,5 +1,5 @@
// Member templates for the -*- C++ -*- string classes.
-// Copyright (C) 1994 Free Software Foundation
+// Copyright (C) 1994, 1999 Free Software Foundation
// This file is part of the GNU ANSI C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -94,14 +94,14 @@ check_realloc (basic_string::size_type s) const
template <class charT, class traits, class Allocator>
void basic_string <charT, traits, Allocator>::
-alloc (basic_string::size_type size, bool save)
+alloc (basic_string::size_type __size, bool __save)
{
- if (! check_realloc (size))
+ if (! check_realloc (__size))
return;
- Rep *p = Rep::create (size);
+ Rep *p = Rep::create (__size);
- if (save)
+ if (__save)
{
p->copy (0, data (), length ());
p->len = length ();
diff --git a/gnu/egcs/libstdc++/std/bastring.h b/gnu/egcs/libstdc++/std/bastring.h
index 70891262e96..bbe873085ea 100644
--- a/gnu/egcs/libstdc++/std/bastring.h
+++ b/gnu/egcs/libstdc++/std/bastring.h
@@ -1,5 +1,5 @@
// Main templates for the -*- C++ -*- string classes.
-// Copyright (C) 1994, 1995 Free Software Foundation
+// Copyright (C) 1994, 1995, 1999 Free Software Foundation
// This file is part of the GNU ANSI C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -180,11 +180,11 @@ public:
: dat (nilRep.grab ()) { assign (n, c); }
#ifdef __STL_MEMBER_TEMPLATES
template<class InputIterator>
- basic_string(InputIterator begin, InputIterator end)
+ basic_string(InputIterator __begin, InputIterator __end)
#else
- basic_string(const_iterator begin, const_iterator end)
+ basic_string(const_iterator __begin, const_iterator __end)
#endif
- : dat (nilRep.grab ()) { assign (begin, end); }
+ : dat (nilRep.grab ()) { assign (__begin, __end); }
~basic_string ()
{ rep ()->release (); }
@@ -208,6 +208,9 @@ public:
#endif
{ return replace (iend (), iend (), first, last); }
+ void push_back(charT __c)
+ { append(1, __c); }
+
basic_string& assign (const basic_string& str, size_type pos = 0,
size_type n = npos)
{ return replace (0, npos, str, pos, n); }
diff --git a/gnu/egcs/libstdc++/std/complext.cc b/gnu/egcs/libstdc++/std/complext.cc
index d50bf0871f6..60227f21329 100644
--- a/gnu/egcs/libstdc++/std/complext.cc
+++ b/gnu/egcs/libstdc++/std/complext.cc
@@ -236,7 +236,7 @@ pow (const complex<FLOAT>& xin, int y)
if (y < 0)
{
y = -y;
- x = 1/x;
+ x = FLOAT(1)/x;
}
for (;;)
{
diff --git a/gnu/egcs/libstdc++/std/valarray_array.h b/gnu/egcs/libstdc++/std/valarray_array.h
index f711e52a165..a0b5818fd8b 100644
--- a/gnu/egcs/libstdc++/std/valarray_array.h
+++ b/gnu/egcs/libstdc++/std/valarray_array.h
@@ -73,7 +73,7 @@ template<typename _Tp>
inline void
__valarray_copy (const _Tp* __restrict__ __a, size_t __n, size_t __s,
_Tp* __restrict__ __b)
-{ for (size_t __i=0; __i<__n; ++__i, ++__b, __a += __s) *__b += *__a; }
+{ for (size_t __i=0; __i<__n; ++__i, ++__b, __a += __s) *__b = *__a; }
// copy plain __a[<__n>] in strided __b[<__n : __s>]
template<typename _Tp>
diff --git a/gnu/egcs/libstdc++/stl/ChangeLog b/gnu/egcs/libstdc++/stl/ChangeLog
index aa4aa155d7e..785fb587e82 100644
--- a/gnu/egcs/libstdc++/stl/ChangeLog
+++ b/gnu/egcs/libstdc++/stl/ChangeLog
@@ -1,3 +1,8 @@
+1999-11-06 Martin v. Löwis <loewis@informatik.hu-berlin.de>
+
+ * bitset (class bitset): Declare reference as our friend.
+ * bitset: Include limits.h.
+
Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
* gcc-2.95.2 Released.
diff --git a/gnu/egcs/libstdc++/stl/bitset b/gnu/egcs/libstdc++/stl/bitset
index e26845ed045..8b4f8b1a0f8 100644
--- a/gnu/egcs/libstdc++/stl/bitset
+++ b/gnu/egcs/libstdc++/stl/bitset
@@ -36,6 +36,7 @@
#include <stddef.h> // for size_t
+#include <limits.h> // for CHAR_BIT
#include <string>
#include <stdexcept> // for invalid_argument, out_of_range, overflow_error
#include <iostream.h> // for istream, ostream
@@ -568,6 +569,8 @@ private:
public:
// bit reference:
+ class reference;
+ friend class reference;
class reference {
friend class bitset;