1998-08-17  Mark Mitchell  <mark@markmitchell.com>

	* stdexcept: Put things in the std namespace, if appropriate.

1998-07-12  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (VERSION): Bump to 2.9.0.

1998-07-12  Lars Albertsson <lalle@sics.se>

	* std/bastring.cc (find_last_of): Fix.
	(find_last_not_of): Likewise.

1998-07-06  Manfred Hollstein  <manfred@s-direktnet.de>

	* configure.in (INSTALLDIR): Make sed pattern failsafe.

1998-07-06  Ulrich Drepper  <drepper@cygnus.com>

	* std/bastring.h (class basic_string): Correct iterator return
	values in insert member functions.

1998-07-02  Ulrich Drepper  <drepper@cygnus.com>

	* std/bastring.h (class basic_string): Return correct iterators in
	erase member functions.

1998-06-24  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (INSTALLDIR): Add comment to document the fact,
	this macro will be properly initialized at make's runtime.
	(install): Add initialization of INSTALLDIR depending on $(libsubdir)
	and ${enable_version_specific_runtime_libs}; use $${INSTALLDIR} shell
	variable instead of the $(INSTALLDIR) make macro.

Tue Mar 24 10:13:07 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.cc (basic_string::copy): Mark const here, too.

1998-03-23 15:59  Ulrich Drepper  <drepper@cygnus.com>

	* std/bastring.h (basic_string::copy): Mark copy function as const.
	Reported by Scott Schurr <scotts@ims.com>.

Thu Mar  5 09:23:28 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* configure.in: Make locating frag files failsafe even for the
	special case if configuring and building in srcdir.

1998-03-04 12:37  Ulrich Drepper <drepper@cygnus.com>

	* cinst.cc [INSERT] (operator<<): Correct type of numeric argument.

Fri Feb  6 01:36:21 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (piclist): Check value of enable_shared, not PICFLAG.
	(stmp-string, ...): Dito.
	(bigstmp-string, ...): Dito.

Sun Feb  1 13:38:07 1998  H.J. Lu  (hjl@gnu.org)

	* config/linux.mt: Don't define _PTHREADS, but define
	_IO_MTSAFE_IO.

Wed Jan 28 10:27:11 1998  Manfred Hollstein  <manfred@s-direktnet.de>

        * tests/configure.in, testsuite/configure.in: Update with yesterday's
	toplevel configure.in changes.

Tue Jan 27 23:27:32 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* configure.in (package_makefile_rules_frag): New variable
	which is used in the call to config.shared; redirect file descriptor 2
	to ${package_makefile_rules_frag}.

Tue Jan 27 10:11:27 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (install): Remove the shared library symlink even if
 	we aren't installing it.

Tue Jan 27 10:29:44 1998  H.J. Lu  (hjl@gnu.org)

	* configure.in (topsrcdir): New.
	(configdirs): Check ${topsrcdir}/gcc instead.
	(config-ml.in): Use ${topsrcdir}/config-ml.in.

	* tests/configure.in (topsrcdir): New.
	(check): Check ${topsrcdir}/gcc instead.

Sun Jan 25 14:01:50 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.h (unique): We only need length bytes.
	(c_str): Avoid writing over random memory.
	#include <std/bastring.cc>.
	Lose _G_ALLOC_CONTROL.
	* std/bastring.cc: Likewise.
 	(nilRep): Add initializer for selfish.
	* sinst.cc: Just #include <string>.

Tue Jan 13 21:23:05 1998  H.J. Lu  (hjl@gnu.org)

	* configure.in (configdirs): Include testsuite only if
	${srcdir}/../gcc exists.

	* tests/configure.in (check): Set to ${CHECK} if
	${srcdir}/../../gcc doesn't exists.

1998-01-05  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* std/bastring.cc (basic_string::Rep::operator delete): Don't claim
	to return from deallocate, since this is a void method.

Sat Jan  3 12:15:41 1998 Franz Sirl <franz.sirl-kernel@lauterbach.com>

	* configure.in: Finalize support for {alpha|powerpc}*-*-linux-gnulibc1

Sun Dec  7 02:34:40 1997  Jody Goldberg	<jodyg@idt.net>

	* libstdc++/std/bastring.h : Move closer to the draft standard
	implementation of basic_string by adding 3 paramter 'Allocator'.
	NOTE: this still differs from the standard in not offering per
	instance allocators.
	* libstdc++/std/bastring.cc : Likewise.
	* libstdc++/stlinst.cc : Handle thread safe allocators if they are the
	default.

Sun Dec  7 02:32:20 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* iosfwd: New header.
	* Makefile.in (HEADERS): Add it.

Sun Dec  7 02:32:20 1997  Gregory L. Galloway (gregg@eoeml.gtri.gatech.edu)

	* Makefile.in (HEADERS): Modified list of headers to
	install to include all of SGI STL headers especially hash_set and
	hash_map, and added ANSI C++ style wrappers for fstream, iomanip,
	iostream, and strstream.

	* fstream, iomanip, iostream, strstream: New forwarding headers
	added.

Thu Nov 27 01:33:55 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (install): Change gxx_includedir to gxx_include_dir.

Tue Nov 25 23:16:44 1997  Jason Merrill  <jason@yorick.cygnus.com>

	London changes to string:
	* std/bastring.cc (check_realloc): Don't be selfish anymore.
	* std/bastring.h (non-const operator[]): Be selfish.
	(iterator forms of insert and erase): Stay selfish.

Tue Nov 25 14:03:43 1997  H.J. Lu  (hjl@gnu.org)

	* Makefile.in (stmp-complex, bigstmp-complex): Changed to
	xxxx-complx.

Mon Nov 24 14:41:33 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in: Use ln -f -s, not ln -s -f.

Fri Nov 21 12:56:24 1997  Manfred Hollstein <manfred@s-direktnet.de>

	* Makefile.in (bigstmp-complex): Name changed to bigstmp-complx to
	cope with filesystem not capable to handle names longer than
	14 characters.

Sun Nov 16 22:41:55 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (SHLIB): Build with CC instead of CXX.

Sun Nov  2 23:34:09 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* configure.in: Use delta.mt for m68k-motorola-sysv.
	* config/delta.mt: New makefile fragment.

Sun Nov  2 12:14:37 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (install): Some of HEADERS come from the stl dir now.
	* algorithm, deque, functional, iterator, list, map, memory, numeric,
 	queue, set, stack, utility, vector: Now in stl dir.

Fri Oct 10 00:40:00 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.h: Use ibegin internally.  Return passed iterator
	instead of recalculating it where appropriate.
	* std/bastring.cc: Adjust for erase.

	From Yotam Medini:
	* std/bastring.h: Replace remove with erase.

Thu Oct  9 23:24:36 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* stdexcepti.cc (__out_of_range): New fn.
	(__length_error): New fn.

	* std/bastring.h (OUTOFRANGE): Fix logic.  Use throwing functions.
	(LENGTHERROR): Likewise.
	Revert Oct 2 changes.
	* string: Revert Oct 2 changes.

Tue Oct  7 00:51:51 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* std/{f,d,ld}complex.h: Replace guiding fns if not -ansi.

Thu Oct  2 00:08:18 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.h: Move exception stuff after definition of string.
	Move typedef of string here.
	* string: From here.

Sat Sep 27 16:48:00 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* std/complext.h: Lose injection decls.
	* std/fcomplex.h: Likewise.
	* std/dcomplex.h: Likewise.
	* std/ldcomplex.h: Likewise.

Sat Sep 27 16:47:35 1997  Mark Mitchell  <mmitchell@usa.net>

	* std/complext.h: Declare templates before making them
	friends.  Use new friend <> syntax.
	* std/complext.cc: Don't rely on guiding declarations.
	* std/fcomplex.h: Use new friend <> syntax.
	* std/dcomplex.h: Likewise.
	* std/ldcomplex.h: Likewise.

Thu Sep 25 19:55:56 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.h: Enable exceptions.
 	(assign, append, insert, replace): Implement member template versions.

1997-09-15 02:37  Ulrich Drepper  <drepper@cygnus.com>

	* config/linux.mt: New file.  Make sure _PTHREADS is defined
	if necessary.
	* configure.in: Find linux.mt file.

Thu Sep 11 15:03:20 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.h (class basic_string): Add global scope to
	use of reverse_iterator.

Tue Sep  9 19:47:07 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.h: Adjust use of reverse_iterator template.

Wed Aug 27 00:04:33 1997  Alexandre Oliva  (oliva@dcc.unicamp.br)

	* Makefile.in: create correct multiple links to
	shared libstdc++.

Tue Aug 26 12:24:01 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* testsuite/Makefile.in (check): Don't depend on site.exp.
	(just-check): Depend on site.exp.

Mon Aug 25 14:26:45 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (CXXFLAGS): Add -Weffc++.

Sat Aug 23 21:25:37 1997  Mark Mitchell  <mmitchell@usa.net>

	* bastring.h: Enable reverse_iterator and its ilk.

	* bastring.h: Provide specializations of member function templates
	for const_iterator.

Wed Jul 30 10:59:00 1997  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* stlinst.cc: Add instantiation file for
	__default_alloc_template<fale, 0> and
	__malloc_alloc_template<0>

Sun Jun  1 17:03:40 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.cc (find_last_of): Correct handling of POS.
	(find_last_not_of): Likewise.

Thu May  1 17:37:10 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in ($(SHLIB)): Add $(LIBCXXFLAGS).

Wed Apr 30 12:06:23 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (IO_DIR): Remove $(MULTIBUILDTOP).
	(LIBIBERTY_DIR): Likewise.
	* configure.in: Don't turn on multilib here.

Fri Apr 25 16:09:15 1997  Bob Manson  <manson@charmed.cygnus.com>

	* testsuite/libstdc++.tests/test.exp, testsuite/lib/libstdc++.exp,
	  testsuite/configure.in, testsuite/Makefile.in,
	  testsuite/config/default.exp, testsuite/ChangeLog: New files.

	* configure.in: Add new testsuite directory to be configured.

Tue Apr 22 19:03:39 1997  Alexandre Oliva <oliva@dcc.unicamp.br>

	* Makefile.in (install): Fix handling of mshlink.

Fri Apr  4 03:25:13 1997  Ulrich Drepper  <drepper@cygnus.com>

	* Makefile.in (IO_DIR): Prepend $(MULTIBUILDTOP) to
	support multilib build.
	(LIBIBERTY_DIR): Likewise.

	* configure.in: Enable multilibing by default.
	Update multilib template to read config-ml.in.

Wed Mar 12 16:09:34 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* configure.in (XCXXINCLUDES): Add the STL directory.

Thu Jan 23 08:08:43 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* stdexcept: Delete dtors for all of the error classes, to match
	their removal in the Apr 1995 WP.
 	(class overflow_error): Define missing class, added in May 1996 WP.

Mon Nov 18 16:57:25 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (stuff[12]): More rules for my own evil purposes.
	(CXXFLAGS, CFLAGS): Use -O instead of -O3 so debugging works.

Wed Oct 16 13:47:45 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* config/irix5.ml: Do link against the math library.
	* configure.in: Support shared libs on Irix 6.

Fri Oct 11 18:06:09 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* config/linux.ml: Lose version overrides.

	* Makefile.in (MSHLINK): Defaults to .so.2.x
	(mshlink): Indirect rule for making it.

Tue Sep 24 17:58:31 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Remove new, typeinfo, exception, stddef*.
	* Move public headers from std/*.h to *.

Sun Sep 22 05:35:55 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in: Remove new, exception, typeinfo handling.
	* exceptioni.cc, newi.cc, typeinfoi.cc, std/exception.h, std/new.h,
	std/typeinfo.h, new.h: Remove.
	* typeinfo, new, exception: Refer to the files with .h in gcc.

Fri Sep 20 14:39:19 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in: Remove references to stl.list.
	* configure.in (configdirs): Remove stl.

Sat Sep 14 09:42:08 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (stuff): Convenience for me.

	* std/bastring.h: Remove kludge obsoleted by new overloading code.

Fri Sep  6 16:43:21 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeinfoi.cc (__dynamic_cast): Fix static_cast.
	(__rtti_si): Likewise.
	(dcast): Likewise.

Thu Aug 29 17:06:23 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (i[345]86-*-*): Recognize i686 for pentium pro.

Tue Jul 23 14:27:44 1996  Mike Stump  <mrs@cygnus.com>

	* Makefile.in (exceptioni.o): Use -fexceptions now.

Mon Jun 17 13:57:24 1996  Per Bothner  <bothner@deneb.cygnus.com>

	* std/bastring.h (class basic_string::remove):  Add casts.

	* configure.in:  Use EXTRA_DISTCLEAN rather than DISTCLEAN.

Fri Jun  7 14:09:20 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeinfoi.cc (BUILTIN): Align typeinfo object like a pointer.

Wed May 29 16:48:35 1996  Mike Stump  <mrs@cygnus.com>

	* exceptioni.cc (__throw_bad_exception): Add.
	* std/exception.h (bad_exception): Add.
	* std/typeinfo.h: Remove leftovers of bad_cast_object.

Mon May  6 14:04:42 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* std/complext.h: s/FLOAT/_FLT/g.

Thu May  2 17:26:24 1996  Mike Stump  <mrs@cygnus.com>

	* exceptioni.cc (uncaught_exception): New routine.
	* std/exception.h: Declare it.

Thu Apr 25 13:20:57 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (typeinfoi.o, stdexcepti.o): Use default rule.

Wed Apr 24 18:38:24 1996  Mike Stump  <mrs@cygnus.com>

	* exceptioni.cc: Add #pragma implementation.
	* std/exception.h: Add #pragma interface.  Moved exception from
	stdexcept.
	* std/stdexcept.h: Moved exception to exception.  Fix all constructor
	arguments to take strings to match ANSI.  Moved bad_cast and bad_typeid
	to typeinfo.
	* std/typeinfo.h: Moved bad_cast and bad_typeid from stdexcept.

Wed Apr 24 10:43:07 1996  Doug Evans  <dje@blues.cygnus.com>

	* Makefile.in (newi.o,cstringi.o,stddefi.o,cstdlibi.o,cmathi.o): Add
	rules for SunOS VPATH.

Fri Apr 19 17:24:51 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Version 2.8.0b3.

Wed Apr 10 14:38:05 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeinfoi.cc (base_info): Pack the latter three fields into 32 bits.

Tue Apr  9 15:49:38 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeinfoi.cc: Add 'const'.
	(__class_type_info): Now just one pointer to an array of structs,
	rather than four pointers to arrays.

	* typeinfoi.cc (__throw_type_match_rtti): Check for conversion to
	void* before conversion to base*.
	(dcast): Handle downcasting to X* given other X	subobjects in
	the most derived type.  Ack.

Mon Apr  8 15:20:32 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Permit --enable-shared to specify a list of
	directories.

Sun Apr  7 22:50:53 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeinfoi.cc (__rtti_array): New entry point.

Sat Apr  6 14:41:18 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* exceptioni.cc (__throw_bad_cast): New entry point for compiler.
	* typeinfoi.cc: Remove __bad_cast_object.

	* typeinfoi.cc: Add nodes for unsigned builtins.

Fri Apr  5 18:16:22 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeinfoi.cc, std/typeinfo.h: Total overhaul.  Move most
 	everything out of the header, move name field into type_info, add
 	single-inheritance case, rewrite pointer handling, add new
 	compiler interface.  Compare addresses to check for equality.

Wed Mar 27 11:54:08 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Version 2.8.0b2.

Fri Mar  8 13:56:18 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* std/[cs]inst.h: Remove.

Thu Mar  7 07:29:00 1996  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* Makefile.in (install): Restore deleted chdir to stl subdir.

Thu Mar  7 15:02:58 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* std/complext.h: Fix __attribute__ usage.

Wed Feb 28 10:00:24 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Version 2.8.0b1.

Mon Feb 26 17:26:26 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* std/cstring.h: New approach to changing signatures of string
 	manipulation functions.  Still disabled.

Tue Feb 20 18:29:30 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* std/complext.h (__doapl, __doami, __doaml, __doadv): Helper
 	templates to implement +=, -=, *= and /=, respectively, since
 	member function templates do not apply to class specializations.
	* std/{f,d,ld}complex.h, std/complext.cc, cinst.cc: Adjust.

	* std/bastring.h: The representation class is now a nested class.
	* std/bastring.cc: Add templates for static data members.
	* sinst.cc: Don't provide specializations for static data members.
	* std/string.h: Use default template parameters.

	* Makefile.in (CXXFLAGS): Remove -pedantic -ansi.
	(CFLAGS): Ditto.

Wed Feb 14 14:39:07 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.cc (check_realloc): Fix for sizeof (charT) > 1.
	From John Hickin <hickin@bnr.ca>.

Wed Jan 10 11:05:04 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.h (insert): Fix iterator handling.
	From Joe Buck <jbuck@synopsys.com>.

Mon Jan  8 11:48:03 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.h (max_size): Fix for sizeof (charT) > 1.
	* std/bastring.cc (replace): Use it.

	* std/bastring.cc (rfind): Fix for n > length ().

Tue Dec 19 15:13:08 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* config/aix.ml (SHFLAGS): Add -Wl,-unix.

Mon Dec 18 12:48:25 1995  Mike Stump  <mrs@cygnus.com>

	* Makefile.in (exceptioni.o): Compile with -fhandle-exceptions, so
	we can unwind through unexpected on machines that don't have a
	working __unwind_function.

Sun Dec 17 00:28:31 1995  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (install): Make sure shared libraries
	are installed with mode 555.

Mon Nov 27 15:01:56 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (install): Make shared library links relative.
	(install): Break up -sf into -s -f.
	({M,}SHLINK): Ditto.

Sun Nov 26 22:48:06 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* queue: Include <stack.h> instead of <queue.h>.

Sat Nov 25 11:33:13 1995  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (install): Fix setting of rootme.

Tue Nov 21 14:20:34 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Check ${with_cross_host} rather than comparing
	${host} and ${target}.

Tue Nov 14 01:50:52 1995  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (IO_DIR): Delete MULTITOP, MULTISUBDIR.
	(LIBIBERTY_DIR): Likewise.
	(INSTALLDIR): Delete MULTISUBDIR.
	* configure.in: Delete call to cfg-ml-com.in.  Call config-ml.in
	instead of cfg-ml-pos.in.
	(XCXXINCLUDES): Delete MULTITOP.
	* stl/configure.in (XCXXINCLUDES): Delete MULTITOP.
	(config-ml.in): Call instead of cfg-ml-pos.in.

Sun Nov 12 16:44:25 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* Makefile.in (VERSION):  Set to 2.7.1.

Thu Nov  9 17:39:28 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* config/{aix,dec-osf,irix5,linux,sol2shm}.ml: Remove LDLIBS defn;
 	no longer needed now that make check sets LD_LIBRARY_PATH.

Wed Nov  8 19:46:35 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

        * std/bastring.h: Wrap with #ifndef/#define/#endif.
        * std/cassert.h: Likewise.
        * std/cinst.h: Likewise.
        * std/complext.h: Likewise.
        * std/dcomplex.h: Likewise.
        * std/fcomplex.h: Likewise.
        * std/ldcomplex.h: Likewise.
        * std/sinst.h: Likewise.

Wed Nov  8 16:15:48 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.cc (getline): Update to September 95 WP.  Now we
 	don't set failbit when reading an empty line.

Tue Nov  7 16:09:04 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.cc (new): Fix for sizeof (charT) != 1.

Sat Nov  4 17:37:16 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* std/complext.cc (operator / (FLOAT, const complex<FLOAT>&)):
 	Reimplement along the lines of the other operator / templates.
	From John Eaton <jwe@bevo.che.wisc.edu>.

Sat Nov  4 13:33:50 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* configure.in (DISTCLEAN):  New, to add target-mkfrag.

Tue Oct 31 13:59:32 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* std/bastring.h: Use size_t for the reference count.
	* std/bastring.cc (create): Set selfish.
	From Joe Buck (jbuck@synopsys.com).

Mon Oct 30 23:09:48 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* configure.in:  Don't bother changing LIBIBERTY for cross,
	now that we are using target-libiberty instead.
	* Makefile.in (LIBIBERTY_DIR):  Simplify.
	(LIBIBERTY):  Remove.

Wed Oct 11 14:56:49 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* config/sol2shm.ml: New files with -rpath.
	* configure (*-*-solaris*): Use sol2shm.ml.

Thu Sep 28 09:26:52 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/straits.h (compare, copy, move, set): Fix for non-char charT's.
	* std/bastring.h (basic_string::remove): Fix for non-char charT's.

Tue Sep 26 15:22:56 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* config/irix5.ml: Pass -rpath to links.

Fri Sep 15 00:17:47 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* config/linux.ml: Conform to Linux shared library numbering
 	scheme.
	* Makefile.in: Ditto.

Tue Sep 12 00:28:56 1995  Mike Stump  <mrs@cygnus.com>

	* typeinfoi.cc: (__pointer_type_info::__rtti_match): Moved from
	the headerfile, include all sorts of pointer conversions from 15.3
	para 2.
	* std/typeinfo.h (__pointer_type_info::__rtti_match): Moved from here.

Mon Sep 11 23:27:59 1995  Mike Stump  <mrs@cygnus.com>

	* std/typeinfo.h (__pointer_type_info::__rtti_match): We no longer
	have to dereference the object pointer, as the pointer is always
	passed directly.

Mon Sep 11 19:29:51 1995  Mike Stump  <mrs@cygnus.com>

	* std/typeinfo.h (__pointer_type_info::__rtti_match): Define so
	that pointer conversions can happen on catch type matching.
	* typeinfoi.cc (__throw_type_match_rtti): Arrange for __rtti_match
	to be used on pointers.

Tue Sep  5 14:49:19 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* string.h: Remove for now.

Thu Aug 31 14:14:01 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/bastring.cc (operator>>): Simplify and fix.
	(resize): Fix order of arguments to append.
	(getline): Simplify and fix.

Thu Aug 24 17:44:09 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/cstdlib.h (abs): Provide default implementation for peons
 	without labs.

Tue Aug 22 08:43:07 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/cstdlib.h: Comment out definition of div(long,long) for now,
 	since not all targets have ldiv.

Mon Aug 21 11:46:03 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/cmath.h: Wrap abs(double) with #if ! _G_MATH_H_INLINES.

	* stl.h: Add, for compatibility with ObjectSpace STL.

	* std/complext.cc (operator /): Use abs instead of fabs.

	* std/bastring.h (replace): Update single-character replace method
 	as per my proposal.

	* std/cmath.h: Add abs(float), abs(double) and abs(long double).
  	Add commented-out declarations for other float and long double
 	math functions.

	* std/cstdlib.h: Add abs(long) and div(long,long).

	* Makefile.in (install): Make shared library executable and
 	non-writable.  Tidy.
	(OBJS): Add cstdlibi.o and cmathi.o.

	* Rename implementation files to have different basenames.

Mon Aug 21 00:57:03 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* Makefile.in (install): Use "cd stl"; no need for $(srcdir)
	prefix because we're already in $(srcdir).

Tue Jul 25 18:41:29 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* std/stddef.h:  Remove obsolete definition of enum capacity.

Sat Jul 22 13:37:01 1995  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (IO_DIR): Add multilib support.
	(LIBIBERTY, LIBIBERTY_OBJS, INSTALLDIR, stdlist): Likewise.
	(libiberty.a, install): Likewise.
	* configure.in: Likewise.
	(XCXXINCLUDES): Likewise.
	* stl/configure.in: Likewise.
	(XCXXINCLUDES): Likewise.

Mon Jul 17 09:29:31 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* Makefile.in (typeinfo.o, stdexcept.o): Put an else for the if
	stmt checking PICFLAG.
	(stmp-string, bigstmp-string, stmp-complex, bigstmp-complex): Likewise.

Wed Jun 28 17:05:29 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/*.h: Wrap with extern "C++".

	* std/ciso646.h: Don't worry about #undefing the keywords.

Mon Jun 26 19:05:38 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/bastring.h (operator!=): If they've included the STL
        function.h, don't overload the operator templates that it defines.

Fri Jun 23 16:54:17 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* Makefile.in (SHLINK): Force link.
	(install): Ditto.

	* std/bastring.h (terminate): Never reallocate.
	(alloc): No longer const.

	* std/bastring.cc (create): Always allocate an extra byte.
	(check_realloc): Always leave room for an extra byte.
	(*find*): Add missing 'const'.

	* Makefile.in (SHARLIB): Provide a default value.

Tue Jun 20 16:29:52 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/cstring.h: Don't bother tweaking prototypes for now.  When
        we do, we will use new-style casts.

Fri Jun 16 13:57:53 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* Makefile.in (VERSION): Update to 2.7.0.

	* config/aix.ml: Build both shared and archive libraries.

Wed Jun 14 21:44:21 1995  Jason Merrill  <jason@python.cygnus.com>

	* configure.in (frags): Use linux.ml for Linux/ELF.
	* config/linux.ml: New file.

Wed Jun 14 17:56:23 1995  Niclas Andersson  <nican@ida.liu.se>

	* configure.in: Use xiberty when building cross-compiler.

Wed Jun 14 12:57:47 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/*complex*, std/cinst.h, cinst.cc: Pass by reference to const
        rather than by value.
	* std/*complex*: Add member functions real() and imag().

Sat Jun 10 12:14:38 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* Makefile.in (bigstmp-string): Call main string object cstrmain.o
        instead of cstring.o.

Wed Jun  7 11:15:15 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/cstring.h: Use #include_next to pick up <string.h>.

	* string.h: New file.

	* Makefile.in (MOSTLYCLEAN_JUNK): Remove piclist.

	* configure.in (MOSTLYCLEAN): Remove stamp-picdir.

Mon Jun  5 18:36:39 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* config/*.ml: Build both shared and archive libraries.

	* configure.in (MOSTLYCLEAN): Remove pic.
	(frags): Use toplevel pic frags.

	* Makefile.in (piclist): New rule.
	(SHLIB): Use it.
	(stl.list): Removed.
	(typeinfo.o): Also build pic version.
	(stdexcept.o): Ditto.
	(*stmp-*): Ditto.

Tue May 30 12:01:14 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/{complext,{f,d,ld}complex}.h: To declare specializations,
        use friend declarations in the class body...
	* std/cinst.h: ...rather than macro hackery.

	* Makefile.in (stdlist): Renamed from list.

	* cstdarg: Don't define __CSTDARG__.
	* complex.h: Similarly.

Tue May  9 19:31:20 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/bastring.cc (operator>>): Use an int to store the return value
        of streambuf::sbumpc.
	(getline): Ditto.
	* std/bastring.* (replace): Reverse size_t and charT arguments.

	* configure.in (enable_shared): Support enable_shared under AIX.

	* Makefile.in (SHARLIB): New variable and rule for building an
        archive library containing a single shared object (for AIX).

Mon May  8 01:43:19 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/bastring.h (remove): Forgot one.
	(empty): And this.
	Disable copy-on-write if someone takes an iterator.

	* std/bastring.cc (getline): Avoid resizing down if unnecessary.
	(operator>>): Don't use private methods.

Sun May  7 02:39:56 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/bastring.h (insert, replace): Fix.
	* std/bastring.cc (find_*_of): Fix.

Fri May  5 01:45:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/bastring.h: Add iterator remove fn.  Remove evil default
        arguments.

	* std/*complex*, std/cinst.h, cinst.cc: s/__complex/complex/g.
        complex<float> is now specialized.  Lose _*_complex in favor of
        'explicit' constructors.
	* std/complex.h: Lose typedef of complex.
	* std/fcomplex.h: New file.
	* std/complext.cc (operator<<): Accept more input forms.

	* std/bastring.h: Add iterator insert fns.

Thu May  4 02:30:04 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/bastring.*: Update to current draft.

	* std/bastring.*: Reorganize so that the pointer in a string
        object points to the data rather than the bsrep object, for
        debugging.

Tue Apr 25 17:15:09 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* configure.in: Update to stay in sync with config.shared.

Mon Apr 24 13:08:46 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/complext.h: Declare hypot.  Declare appropriate functions const.

Wed Apr 12 15:26:25 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* Makefile.in (typeinfo.o): Don't use $<.
	(stdexcept.o): Ditto.

Sat Apr  8 15:35:00 1995  Mike Stump  <mrs@cygnus.com>

	* std/typeinfo.h: Move bad_cast, bad_typeid and __bad_cast_object
	from here to stdexcept.
	* std/stdexcept.h: Ditto.
	* Makefile.in (stdexcept.o): Added rule to build typeinfo.o with
	-frtti to support matching of thrown objects with rtti info for
	bad_cast.

Mon Apr  3 18:13:14 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeinfo: New file.

	* Makefile.in (HEADERS): Add typeinfo.

Mon Apr  3 15:06:58 1995  Mike Stump  <mrs@cygnus.com>

	* Makefile.in (typeinfo.o): Added rule to build typeinfo.o with
	-frtti to support matching of thrown objects with rtti info for
	bad_cast.

Wed Mar 29 15:56:06 1995  Mike Stump  <mrs@cygnus.com>

	* typeinfo.cc: (__throw_type_match_rtti): Added to support
	matching of thrown objects with rtti info.

Thu Mar 23 18:42:30 1995  Jason Merrill  <jason@deneb.cygnus.com>

	* Makefile.in (HEADERS): Add stdexcept.

Sun Mar 12 01:25:27 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/typeinfo.h: Add return statements to dummy methods.

Wed Mar  8 16:09:50 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* config/dec-osf.ml: Use -rpath flag.

Fri Feb 17 18:16:46 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/typeinfo.h: Add copyright header.

	* Makefile.in (CXXFLAGS): Add a bunch of warning options to keep
        me honest.

Thu Feb 16 00:04:49 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* Makefile.in, config/*.ml: Generate shared library on most hosts
	as libstdc++.so.$(VERSION), with a symlink to libstdc++.so, so that
	multiple versions can coexist.

Fri Feb 10 02:59:39 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/exception.h: {set_,}{terminate,unexpected} have C++ linkage.

	* Makefile.in: Allow string and complex to be split up either by
        individual function or into I/O and non-I/O.  Default to the
        latter.

Wed Feb  8 02:39:47 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/bastring.h: Start thinking about throwing exceptions.

	* typeinfo.cc: Remove private functions; defining them to call
        abort () just delays errors until runtime.  Define
        __bad_cast_object.

	* std/exception.h: Standard exceptions are now defined in
        stdexcept.h.  This header now contains declarations of terminate()
        et al.
	* exception.cc: Move code from libg++/src/except.c here.
	* std/typeinfo.h: Define RTTI-related exceptions here.
	* stdexcept{,.cc},std/stdexcept.h: New files.

Mon Feb  6 18:51:31 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* Makefile.in (HEADERS): Resurrect, add new STL header names.
	(install): Install extensionless headers again.
	* extensionless headers: Resurrect, add new STL headers.
        Currently only forward to std/whatever or stl/whatever.

Mon Jan 30 13:53:22 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/bastring.h (basic_string (charT, size_t)): Mark explicit.

	* Makefile.in (install): Set rootme when installing stl headers.
	Only install *.* from std.

Wed Jan 25 02:29:30 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* std/bastring.h (operator=): grab before releasing.

Mon Jan 23 19:54:02 1995  Ronald F. Guilmette  <rfg@segfault.us.com>

	* Makefile.in (install): Also install STL headers.

Mon Jan 23 04:09:35 1995  Jason Merrill  <jason@python.cygnus.com>

	* Makefile.in (list): Set $rootme before calling make.

Wed Jan 11 19:24:47 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeinfo.cc (__rtti_match): Don't try to do pointer arithmetic
        with a void *.

	* move all headers into std subdirectory and update files accordingly.

Thu Jan  5 01:51:49 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* bastring.ccI (basic_string (size_t, capacity)): s/reserve/::reserve/.

Wed Jan  4 17:27:32 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* exception: s/string/__string/g.

	* configure.in (MOSTLYCLEAN): Add so_locations.

	* bastring.ccI (basic_string (size_t, capacity)): Fix thinko.
	(various find functions): Ditto.

Fri Dec 30 18:04:00 1994  Mike Stump  <mrs@cygnus.com>

	* typeinfo.h: Add support for the built-in type bool.

Fri Dec 30 14:57:02 1994  Mike Stump  <mrs@cygnus.com>

	* typeinfo.{cc, h}: Guard against multiple inclusions, and add #p i/i.

Fri Dec  2 17:56:05 1994  Mike Stump  <mrs@cygnus.com>

	* libg++ 2.6.2 released.

	* typeinfo.{cc, h} (__rtti_match): Change interface to compiler
        for dynamic_casting to gear up for exception handling's use of
        rtti for argument matching.

Tue Nov 29 16:49:32 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* configure.in (configdirs):  Add stl.
	* Makefile.in:  Build stl, and merge .o files from it.

Thu Nov 17 15:30:57 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* bastring.hI: Add iterator, const_iterator, begin() and end() to
        basic_string.

Mon Nov  7 16:50:33 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* Makefile.in, configure.in, config/*.ml, tests/Makefile.in,
	tests/configure.in: Various changes to handle --enable-shared.

Fri Nov  4 19:13:33 1994  Mike Stump  <mrs@cygnus.com>

	* exception{,.cc}: Added to support catching bad_cast's.

Thu Nov  3 17:42:13 1994  Mike Stump  <mrs@cygnus.com>

	* typeinfo.h (type_info::{name, before}): Add to match draft.

Thu Nov  3 00:56:34 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* Makefile.in (LIBIBERTY_OBJS): Add strerror.o.

Mon Oct 31 15:33:06 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* typeinfo.cc: Fix a bug in the final return.
	* typeinfo.cc: Fix the ANSI header version number.
	* typeinfo.h: ditto.

Fri Oct 28 14:23:12 1994  Mike Stump  <mrs@cygnus.com>

	* type_info.{cc,h}: Rename to typeinfo to better match current draft.

Wed Oct 26 11:13:53 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* type_info.h: new header file for rtti.
	* type_info.cc: new code file for rtti.
	* Makefile.in: change to include type_info.o in libstdc++ for rtti.

Sat Oct 15 16:09:51 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* libg++ 2.6.1 released.

	* cinst.hI: Also declare instantiations of out-of-line functions.

Fri Oct 14 15:00:09 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* configure.in (CXXINCLUDES): Use {} to wrap variable name.
	* tests/configure.in (CXXINCLUDES): Ditto.

	* cinst.hI: Declare instantiations of two-argument functions so
        overload resolution will work.
	* complext.hI: Always include cinst.hI.

	* bastring.ccI (operator>>): Tweak.

Tue Oct 11 17:07:49 1994  Jason Merrill  (jason@phydeaux.cygnus.com)

	* stddef*: Do the #pragma i/i thang.

	* bastring.hI (basic_string::put_at): Use operator[].
	(basic_string::terminate): Don't necessarily copy the rep.

	* bastring.ccI (operator>>): Avoid shrinking and then re-expanding
        the string.

	* bastring.*I, sinst.cc: Only allow allocation policy control if
	_G_ALLOC_CONTROL is defined.

	* Makefile.in (libstdc++.a): Depend on iostream.list and libiberty.a.
	(../libio/iostream.list): New rule.
	(../libiberty/libiberty.a): New rule.
	(OBJS): Add stddef.o.

Sat Oct  8 23:59:45 1994  Jason Merrill (jason@phydeaux.cygnus.com)

	* *: First checkin.
