OSDN Git Service

* g++FAQ.texi: Deleted per Joe Buck's request.
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 25 Jul 1999 21:26:16 +0000 (21:26 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 25 Jul 1999 21:26:16 +0000 (21:26 +0000)
        * Makefile.in: Corresponding changes.

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

gcc/cp/ChangeLog
gcc/cp/Makefile.in
gcc/cp/g++FAQ.texi [deleted file]

index fdbec66..2bee044 100644 (file)
@@ -1,3 +1,8 @@
+Sun Jul 25 15:24:21 1999  Jeffrey A Law  (law@cygnus.com)
+
+       * g++FAQ.texi: Deleted per Joe Buck's request.
+       * Makefile.in: Corresponding changes.
+
 1999-07-23  Jason Merrill  <jason@yorick.cygnus.com>
 
        * lex.c: Sync with C frontend.
index d876a14..edd3379 100644 (file)
@@ -322,32 +322,3 @@ TAGS: force
 .PHONY: TAGS
 
 force:
-
-g++FAQ.info:   $(srcdir)/g++FAQ.texi
-       $(MAKEINFO) --no-split -o ./g++FAQ.info $(srcdir)/g++FAQ.texi
-
-# Preprocess the texi file so that the final document will have
-# hyperlinks.
-# It would be nice if texi2html could do something like this itself.
-
-# Assumption 1: the FAQ puts all http: and ftp: links in a @file{...}.
-# Assumption 2: newsgroups are like @file{comp.foo}
-# Assumption 3: email addresses match the regexp shown.
-
-g++FAQ.html:   $(srcdir)/g++FAQ.texi
-       mkdir work
-       sed -e 's?@file{\([fth]*p://[^}]*\)}?@strong{<A HREF="\1">\1</A>}?' \
-           -e 's?@file{\(comp\.[-a-z+.]*\)}?<A HREF="news:\1">\1</A>?' \
-           -e 's?@file{\(gnu\.[-a-z+.]*\)}?<A HREF="news:\1">\1</A>?' \
-           -e 's?\([.+a-zA-Z0-9-]*@@[.a-zA-Z0-9-]*[a-zA-Z0-9]\)?<A HREF="mailto:\1">\1</A>?' \
-           $(srcdir)/g++FAQ.texi > work/g++FAQ.texi
-       cd work; texi2html g++FAQ.texi
-       mv work/*.html .
-       rm -r work
-
-# Make plain-text form.
-
-g++FAQ.txt:    $(srcdir)/g++FAQ.texi
-       $(MAKEINFO) --no-split --no-headers -o - $(srcdir)/g++FAQ.texi |\
-               sed '/^Concept Index/,$$d' > g++FAQ.txt
-
diff --git a/gcc/cp/g++FAQ.texi b/gcc/cp/g++FAQ.texi
deleted file mode 100644 (file)
index 3cbec50..0000000
+++ /dev/null
@@ -1,2423 +0,0 @@
-\input texinfo.tex      @c -*-texinfo-*-
-@c %**start of header
-@setfilename g++FAQ.info
-@settitle Frequently asked questions about the GNU C++ compiler
-@setchapternewpage off
-@c version: %W% %G%
-@c %**end of header
-
-@iftex
-@finalout
-@end iftex
-@titlepage
-@title G++ FAQ
-@subtitle Frequently asked questions about the GNU C++ compiler
-@subtitle June 8, 1998
-@sp 1
-@author Joe Buck
-@page
-@end titlepage
-
-@ifinfo
-@node Top, basics, (dir), (dir)
-@top
-@unnumbered FAQ for g++ and libg++, by Joe Buck (jbuck@@synopsys.com)
-@end ifinfo
-
-@cindex FAQ for g++, latest version
-@cindex Archive site for FAQ lists
-@cindex rtfm.mit.edu
-@cindex Joe Buck <jbuck@@synopsys.com>
-@cindex FAQ for C++
-
-This is a list of frequently asked questions (FAQ) for g++ users; thanks to
-all those who sent suggestions for improvements.  Thanks to Marcus Speh
-for doing the index.  A hypertext version is available on the World Wide
-Web at @file{http://www.cygnus.com/misc/g++FAQ_toc.html}.
-
-Please send updates and corrections to the FAQ to
-@code{jbuck@@synopsys.com}.  Please do @emph{not} use me as a resource
-to get your questions answered; that's what @file{gnu.g++.help} is for and I
-don't have the time to support the net's use of g++.  If you ignore this
-request your message to me may be deleted without a reply.  Sorry.
-
-Many FAQs, including this one, are available on the archive site
-``rtfm.mit.edu''; see @*
-@file{ftp://rtfm.mit.edu/pub/usenet/news.answers}.
-This FAQ may be found in the subdirectory g++-FAQ.
-
-@cindex Marshall Cline 
-@cindex comp.lang.c++
-@cindex C++ FAQ
-This FAQ is intended to supplement, not replace, Marshall Cline's
-excellent FAQ for the C++ language and for the newsgroup
-@file{comp.lang.c++}.  Especially if g++ is the first C++
-compiler you've ever used, the question ``How do I do <X> with g++?''
-is probably really ``How do I do <X> in C++?''.
-You can find this FAQ at
-@file{ftp://rtfm.mit.edu/pub/usenet/comp.lang.c++},
-or in HTML form at @file{http://www.cerfnet.com/~mpcline/On-Line-C++-FAQs/}.
-
-@menu
-* basics::                      What is g++?  How do I get it?
-* egcs and 2.8.x::              The next generation(s) of g++
-* installation::                How to install, installation problems
-* evolution::                   The Evolution of g++
-* User Problems::               Commonly reported problems and bugs
-* legalities::                  Lawyer stuff, GPL, LGPL, etc.
-* index::                       Index of terms
-
- --- The Detailed Node Listing ---
-
-The basics: what is g++?
-
-* latest versions::             What are the latest versions of g++ and libraries?
-* g++ for Unix::                How do I get g++ for Unix?
-* getting-egcs::                How do I get egcs?
-* g++ for HP::                  
-* g++ for Solaris 2.x::         
-* g++ for other platforms::     
-* 1.x vs 2.x versions::         
-
-The Next Generation(s) of g++
-
-* new-in-2.8.x::                What's new in gcc 2.8.x?    
-* egcs-intro::                  What is egcs?
-* egcs-whats-new::              What's new in egcs vs 2.7.2?
-* egcs-bug-fixes::              What was fixed in the latest egcs releases?
-* egcs-linux::                  If I install on Linux, will it overwrite my libraries?
-* egcs-run-both::               How can I run both egcs and an FSF release?
-* egcs-vs-2.8.x::               How will egcs affect 2.8.x?
-* egcs-robustness::             How robust is egcs?
-
-Installation Issues and Problems
-
-* gcc-2 + g++-1::               
-* what else do I need?::        
-* use GNU linker?::             
-* Use GNU assembler?::          
-* shared libraries::            
-* repository::                  
-* repo bugs::                   
-* Use GNU C library?::          
-* Global constructor problems::  
-* Strange assembler errors::    
-* Other problems building libg++::  
-* More size_t problems::        
-* Rebuild libg++?::             
-* co-existing versions::        
-* Installing on Linux::         
-* Linux Slackware 3.0::         
-
-The Evolution of g++
-
-* version 2.7.x::               What's changed in 2.7.x from earlier versions
-* libstdc++::                   
-
-User Problems
-
-* missing virtual table::       
-* for scope::                   
-* const constructor::           
-* unused parameter warnings::   
-* jump crosses initialization::  
-* Demangler::                   
-* static data members::         
-* internal compiler error::     
-* bug reports::                 
-* porting to g++::              
-* name mangling::               
-* problems linking with other libraries::  
-* documentation::               
-* templates::                   
-* undefined templates::         
-* redundant templates::         
-* Standard Template Library::   
-* STL and string::              
-* exceptions::                  
-* namespaces::                  
-* agreement with standards::    
-* compiling standard libraries::  
-* debugging on SVR4 systems::   
-* debugging problems on Solaris::  
-* X11 conflicts with libg++::   
-* assignment to streams::       
-@end menu
-
-@node basics, egcs and 2.8.x, Top, Top
-@chapter The basics: what is g++?
-
-@cindex Free Software Foundation
-@cindex GNU Public License
-@cindex GPL
-
-g++ is the traditional nickname of GNU C++, a freely redistributable
-C++ compiler produced by the Free Software Foundation plus dozens of
-skilled volunteers.  I say ``traditional nickname'' because the GNU
-compiler suite, gcc, bundles together compilers for C, Objective-C,
-and C++ in one package.
-
-While the source code to gcc/g++ can be downloaded for free,
-it is not public domain, but is protected by the GNU Public License,
-or GPL (@pxref{legalities}).
-
-@menu
-* latest versions::             What is the latest version of gcc/g++/libg++?
-* g++ for Unix::                How do I get a copy of g++ for Unix?
-* getting-egcs::                How do I get egcs?
-* g++ for HP::                  Getting g++ for the HP precision architecture
-* g++ for Solaris 2.x::         Getting g++ for Solaris
-* g++ for other platforms::     
-* 1.x vs 2.x versions::         
-@end menu
-
-@node latest versions, g++ for Unix, basics, basics
-@section What is the latest version of gcc, g++, and libg++?
-
-@cindex egcs release
-
-The newest release from the egcs project (on the Web:
-@file{http://www.cygnus.com/egcs/}) is egcs-1.0.3, released May 15,
-1998.
-
-@cindex gcc/g++, version date
-The current version of gcc/g++ is 2.8.1, released March 4, 1998.
-This release fixes some bugs in the 2.8.x release from January.
-It is a huge improvement over the 2.7.x releases.
-
-libg++ has now been deprecated (that is, it is no longer really
-supported), so gcc2.8.1 users need to grab libstdc++-2.8.1 from
-their favorite GNU site (egcs users don't need to get this separately
-as it is bundled with egcs).  However, there is an 'add-on' libg++ 2.8.1
-mini-release.  If you want to use it, you need to combine it with
-libstdc++ 2.8.1.
-
-I would strongly recommend that anyone using a g++ version earlier
-than 2.7.2 should upgrade if at all possible (@pxref{version 2.7.x}).
-Folks who need modern C++ features should upgrade to 2.8.1 or egcs. 
-
-For some non-Unix platforms, the latest port of gcc may be an earlier
-version (2.7.2, say).  You'll need to use a version of libg++ that
-has the same first two digits as the compiler version, e.g. use libg++
-2.7.x (for the latest x you can find) with gcc version 2.7.2.1.
-
-From version 2.8.0 on, you don't need libg++, you only need libstdc++
-(again, the latest version with the same two leading digits as the
-version of g++ you use).
-
-The latest "1.x" version of gcc is 1.42, and the latest "1.x" version of
-g++ is 1.42.0.
-While gcc 1.42 is quite usable for C programs, g++ 1.x is only of
-historical interest (since the C++ language has changed so much).
-
-@node g++ for Unix, getting-egcs, latest versions, basics
-@section How do I get a copy of g++ for Unix?
-
-First, you may already have it if you have gcc for your platform;
-g++ and gcc are combined now (as of gcc version 2.0).
-@cindex GNU gcc, version
-@cindex GNU g++ and gcc
-
-You can get g++ from a friend who has a copy, by anonymous FTP or
-UUCP, or by ordering a tape or CD-ROM from the Free Software
-Foundation.
-@cindex g++, ordering
-@cindex g++, getting a copy
-
-The Free Software Foundation is a nonprofit organization that
-distributes software and manuals to raise funds for more GNU
-development.  Getting your copy from the FSF contributes directly to
-paying staff to develop GNU software.  CD-ROMs cost $400 if an
-organization is buying, or $100 if an individual is buying.  Tapes
-cost around $200 depending on media type.  I recommend asking for
-version 2, not version 1, of g++.
-@cindex FSF [Free Software Foundation]
-@cindex GNU [GNU's not unix]
-
-For more information about ordering from the FSF, contact
-gnu@@prep.ai.mit.edu, phone (617) 542-5942 or anonymous ftp file
-@file{ftp://prep.ai.mit.edu/pub/gnu/GNUinfo/ORDERS} (you can
-also use one of the sites listed below if you can't get into ``prep'').
-
-@cindex FSF, contact <gnu@@prep.ai.mit.edu>
-
-Here is a list of anonymous FTP archive sites for GNU software.
-If no directory is given, look in @file{/pub/gnu}.
-
-@cindex GNUware, anonymous FTP sites
-
-@example
-ASIA: ftp.cs.titech.ac.jp, tron.um.u-tokyo.ac.jp:/pub/GNU/prep
-cair-archive.kaist.ac.kr, ftp.nectec.or.th:/pub/mirrors/gnu
-
-AUSTRALIA: archie.au:/gnu (archie.oz or archie.oz.au for ACSnet)
-
-AFRICA: ftp.sun.ac.za
-
-MIDDLE-EAST: ftp.technion.ac.il:/pub/unsupported/gnu
-
-EUROPE: irisa.irisa.fr, ftp.univ-lyon1.fr,
-ftp.mcc.ac.uk, unix.hensa.ac.uk:/mirrors/uunet/systems/gnu,
-src.doc.ic.ac.uk:/gnu, ftp.ieunet.ie, ftp.eunet.ch,
-nic.switch.ch:/mirror/gnu, ftp.informatik.rwth-aachen.de,
-ftp.informatik.tu-muenchen.de, ftp.win.tue.nl, ftp.nl.net,
-ftp.etsimo.uniovi.es, ftp.funet.fi, ftp.denet.dk,
-ftp.stacken.kth.se, isy.liu.se, ftp.luth.se:/pub/unix/gnu,
-ftp.sunet.se, archive.eu.net
-
-SOUTH AMERICA: ftp.inf.utfsm.cl, ftp.unicamp.br
-
-WESTERN CANADA: ftp.cs.ubc.ca:/mirror2/gnu
-
-USA: wuarchive.wustl.edu:/systems/gnu, labrea.stanford.edu,
-ftp.digex.net, ftp.kpc.com:/pub/mirror/gnu, f.ms.uky.edu:/pub3/gnu,
-jaguar.utah.edu:/gnustuff, ftp.hawaii.edu:/mirrors/gnu,
-uiarchive.cso.uiuc.edu, ftp.cs.columbia.edu:/archives/gnu/prep,
-gatekeeper.dec.com:/pub/GNU, ftp.uu.net:/systems/gnu
-@end example
-
-The ``official site'' is prep.ai.mit.edu, but your transfer will probably
-go faster if you use one of the above machines.
-
-@cindex gzip
-Most GNU utilities are compressed with ``gzip'', the GNU compression
-utility.  All GNU archive sites should have a copy of this program,
-which you will need to uncompress the distributions.
-
-@cindex libstdc++
-Don't forget to retrieve libstdc++ as well!
-
-@node getting-egcs, g++ for HP, g++ for Unix, basics
-@section How do I get egcs?
-
-See @xref{egcs-intro} to find out what egcs is.
-
-You can obtain egcs either by FTP or with a Web browser.  To do the
-latter, start from @file{http://egcs.cygnus.com/}.  The master
-FTP site is @file{ftp://ftp.cygnus.com/pub/egcs/releases}, however
-you'll probably get a faster download if you use a mirror site.
-Mirror sites also have egcs snapshots unless otherwise noted.
-@itemize @bullet
-@item
-US (west coast): @file{ftp://go.cygnus.com/pub/ftp.cygnus.com/egcs/}
-@item
-US (east coast): @file{ftp://ftp.goof.com/pub/pcg/egcs/}
-or (for releases only): @file{ftp://cambridge.cygnus.com/pub/egcs/}
-@item
-US (Arizona): @file{ftp://ftp.ninemoons.com/pub/mirrors/egcs/}
-@item
-UK: @file{ftp://sunsite.doc.ic.ac.uk/Mirrors/egcs.cygnus.com/pub/egcs/}
-@item
-Austria: @file{ftp://gd.tuwien.ac.at/gnu/egcs}
-@item
-France: @file{ftp://ftp.ilog.fr/pub/mirrors/egcs/} or
-@file{ftp://ftp.lip6.fr/pub/egcs}
-@item
-Czech Republic: @file{ftp://sunsite.mff.cuni.cz/pub/GNU/egcs/}
-@item
-Denmark: @file{ftp://sunsite.auc.dk/pub/egcs/}
-@item
-Germany @file{ftp://ftp.fu-berlin.de/unix/languages/egcs/} or
-@file{ftp://ftp.gwdg.de/pub/cygnus/egcs/}
-@item
-Poland: @file{ftp://sunsite.icm.edu.pl/pub/programming/egcs/}
-@item
-Sweden: @file{ftp://ftp.sunet.se/pub/gnu/egcs/}
-@item
-Brasil (releases only, no snapshots):
-@file{ftp://ftp.unicamp.br/pub/gnu/=EXTRA=/cygnus/egcs/}
-@item
-Portugal: @file{ftp://ftp.lca.uevora.pt/pub/egcs/}
-@item
-Romania: @file{ftp://ftp.lbi.ro/pub/egcs/}
-@item
-Australia/NZ (release only): @file{ftp://moshpit.cygnus.com/pub/egcs/}
-@end itemize
-
-@node g++ for HP, g++ for Solaris 2.x, getting-egcs, basics
-@section Getting gcc/g++ for the HP Precision Architecture
-
-@cindex HP Precision Architecture
-@cindex Hewlett-Packard
-@cindex GNU GAS 
-@cindex GNU gdb
-
-If you use the HP Precision Architecture (HP-9000/7xx and HP-9000/8xx)
-and you want to use debugging, you'll need to use the GNU assembler, GAS
-(version 2.3 or later).  If you build from source, you must tell the
-configure program that you are using GAS or you won't get debugging
-support.  A non-standard debug format is used, since until recently HP
-considered their debug format a trade secret.  Thanks to the work of
-lots of good folks both inside and outside HP, the company has seen the
-error of its ways and has now released the required information.  The
-team at the University of Utah that did the gcc port now has code that
-understands the native HP format.
-
-There are binaries for GNU tools in
-@file{ftp://jaguar.cs.utah.edu/dist/},
-but these are older versions.
-
-Jeff Law has left the University of Utah, so the Utah prebuilt
-binaries may be discontinued.
-
-@node g++ for Solaris 2.x, g++ for other platforms, g++ for HP, basics
-@section Getting gcc/g++ binaries for Solaris 2.x
-
-``Sun took the C compiler out of Solaris 2.x.  Am I stuck?''
-
-@cindex Solaris
-@cindex gcc/g++ binaries for Solaris
-
-You can obtain and install prebuilt binaries of gcc.
-
-
-@cindex Solaris pkgadd utility
-The WWW site @file{http://smc.vnet.net/}
-contains various
-GNU and freeware programs for Solaris 2.5 or 2.6, for either the Sparc
-or Intel platforms.  These are
-packaged to enable easy installation using the Solaris ``pkgadd'' utility.
-These include GNU emacs, gcc, gdb, perl, and others.
-
-You can find also find prebuilt binaries of many GNU tools, including the
-compiler, at @file{http://sunsite.unc.edu/pub/solaris/}.
-
-@node g++ for other platforms, 1.x vs 2.x versions, g++ for Solaris 2.x, basics
-@section How do I get a copy of g++ for (some other platform)?
-
-@cindex Windows NT support
-As of gcc-2.7.x, there is Windows NT support in gcc.  Some special
-utilities are required.  See the INSTALL file from the distribution.
-If you're interested in GNU tools on Windows NT, see
-@file{http://www.cygnus.com/misc/gnu-win32/} on the WWW, or the
-anonymous FTP directory
-@file{ftp://ftp.cygnus.com/pub/gnu-win32/}.
-
-@cindex VMS support
-@cindex VAX
-@cindex VMS, g++/libg++ precompiled
-
-The standard gcc/g++ distribution includes VMS support for the Vax.
-Since the FSF people don't use VMS, it's likely to be somewhat less
-solid than the Unix version.  Precompiled copies of g++ and libg++ in
-VMS-installable form for the Vax are available by FTP from
-@file{ftp://mango.rsmas.miami.edu/pub/VMS-gcc/}.
-
-@cindex OpenVMS/Alpha
-Klaus Kaempf (kkaempf@@progis.de)
-has done a port to OpenVMS for the Alpha; this is not yet a
-part of the official gcc/g++.
-The port includes g++ and all libraries from the libg++ distribution.  See
-@file{http://www.progis.de} for more details.
-
-@cindex MS-DOS support
-@cindex Delorie's gcc/g++
-@cindex DJGPP
-@cindex EMX
-There are two different versions of gcc/g++ for MS-DOS: EMX and DJGPP.
-EMX also works for OS/2 and is described later.
-DJGPP is DJ Delorie's port.  It can be found on many FTP archive
-sites; try
-@file{ftp://ftp.coast.net/SimTel/vendors/djgpp/}
-or, for a complete list, see
-@file{http://www.delorie.com/djgpp/getting.html}.
-
-
-The latest version of DJGPP is 2.00.  See
-@file{http://www.delorie.com/djgpp/v2/} for information on this version.
-
-FSF sells floppies with DJGPP on them; see above for ordering software
-from the FSF.
-
-DJGPP has its own newsgroup: @file{comp.os.msdos.djgpp}.
-
-@cindex Amiga support
-Development and porting efforts for GNU tools, including gcc/g++, for
-the Amiga are maintained by an initiative named ADE (Amiga Developers
-Environment.  More information about ADE is available at
-@file{http://www.ninemoons.com/}.
-
-For more information on Amiga ports of gcc/g++, retrieve the file
-@file{ftp://prep.ai.mit.edu/pub/gnu/MicrosPorts/Amiga}.
-
-@cindex Atari ST support
-A port of gcc to the Atari ST can be found at @*
-@file{ftp://atari.archive.umich.edu/atari/Gnustuff/Tos}
-along with many
-other GNU programs.  This version is usually the same as the latest FSF
-release.  See the ``Software FAQ'' for the Usenet group
-@file{comp.sys.atari.st} for more information.
-
-@cindex EMX port 
-@cindex OS/2 support
-
-EMX is a port of gcc to OS/2; it can also be used on MS-DOS.  In addition to
-the compiler port, the EMX port's C library attempts to provide a
-Unix-like environment.  For more information ask around on
-@file{comp.os.os2.programmer.porting}.  Version 0.9c, based on gcc-2.7.2.1,
-was released in
-November 1996.  It is available by FTP and the WWW from, among other
-places
-
-@example
-@file{http://www.os2ss.com/unix/emx09c/}
-@file{ftp://ftp.cdrom.com/pub/os2/emx09c/} (US)
-@file{ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/} (Germany)
-@end example
-
-Eberhard Mattes did the EMX port.  His address is
-mattes@@azu.informatik.uni-stuttgart.de.
-Read the FAQ file included with the distribution before harrassing the author.
-
-@cindex Apple support
-@cindex Macintosh support
-
-I'm looking for more information on gcc/g++ support on the Apple
-Macintosh.  Until recently, this FAQ did not provide such information,
-but FSF is no longer boycotting Apple as the League for Programming
-Freedom boycott has been dropped.
-
-Versions 1.37.1 and 2.3.3 of gcc were ported by Stan Shebs and are available
-at @*
-@file{ftp://ftp.cygnus.com/pub/mac}
-
-They are both interfaced to MPW.
-Stan is working on a version using the current (post-2.7) sources, contact
-him directly (shebs@@cygnus.com) for more information.
-
-@node 1.x vs 2.x versions,  , g++ for other platforms, basics
-@section But I can only find g++-1.42!
-
-``I keep hearing people talking about g++ 2.8.1 (or some other number
-starting with 2), but the latest version I can find is g++ 1.42.  Where
-is it?''
-
-@cindex Objective-C
-@cindex g++, version number
-As of gcc 2.0, C, C++, and Objective-C as well are all combined into a
-single distribution called gcc.  If you get gcc you already have g++.  The
-standard installation procedure for any gcc version 2 compiler will
-install the C++ compiler as well.
-
-One could argue that we shouldn't even refer to "g++-2.x.y" but it's a
-convention.  It means ``the C++ compiler included with gcc-2.x.y.''
-
-@node egcs and 2.8.x, installation, basics, Top
-@chapter The Next Generation(s) of g++
-
-@menu
-* new-in-2.8.x::                What's new in gcc 2.8.x?    
-* egcs-intro::                  What is egcs?
-* egcs-whats-new::              What's new in egcs vs 2.7.2?
-* egcs-bug-fixes::              What was fixed in the latest egcs releases?
-* egcs-linux::                  If I install on Linux, will it overwrite my libraries?
-* egcs-run-both::               How can I run both egcs and an FSF release?
-* egcs-vs-2.8.x::               How will egcs affect 2.8.x?
-* egcs-robustness::             How robust is egcs?
-@end menu
-
-@node new-in-2.8.x, egcs-intro, egcs and 2.8.x, egcs and 2.8.x
-@section What's new in gcc/g++ 2.8.x?
-
-After a two-year wait, gcc 2.8.0 was released in January 1998, along
-with libstdc++-2.8.0 and libg++-2.8.0.  This has been followed up in
-March by the 2.8.1 release of all three packages, though libg++-2.8.1
-is an "add-on" (it does not contain libstdc++ anymore).  Note that
-libstdc++ is required.
-
-For those familiar with egcs, the most obvious difference between
-gcc-2.8.x and egcs is the packaging: egcs is bundled with
-libstdc++, and gcc-2.8.x does not contain the class library.  Otherwise,
-except for the lack of the @code{-frepo} option and some bug fixes
-that have not yet made it into gcc-2.8.x, C++ users will find the
-two compilers to be almost the same at this stage, other than that 2.8.x
-users may get more bogus warnings with -Wall and optimization because
-some fixes to flow analysis in the presence of exceptions that egcs made
-are not yet present in gcc 2.8.x (as of 2.8.1).  
-
-The flow analysis problem in 2.8.1 produces bad code in some cases, not
-just spurious errors.  It only affects code that actually throws an
-exception, and only the path corresponding to a thrown exception gets
-misoptimized.  If this happens, you can try reducing the level of
-optimization.
-
-Because the new feature lists for egcs and gcc 2.8 are almost the same,
-please see @xref{egcs-whats-new} for a list of new features.  It is a
-fairly long list.
-
-@node egcs-intro, egcs-whats-new, new-in-2.8.x, egcs and 2.8.x
-@section What is egcs?
-
-egcs is the experimental GNU compiler system (see
-@file{http://www.cygnus.com/egcs} on the Web).  It is an effort to
-accelerate development of new gcc features by providing a more open
-development model than gcc has traditionally used.
-
-The first egcs release, egcs-1.0, came out on December 3, 1997.
-The current release is egcs-1.0.3, released May 15, 1998.
-
-Questions not addressed here may be answered in the egcs FAQ
-(@file{http://www.cygnus.com/egcs/faq.html}).
-
-@node egcs-whats-new, egcs-bug-fixes, egcs-intro, egcs and 2.8.x
-@section What new C++ features are in egcs?
-
-@strong{Note}: unless indicated otherwise, these features are also
-present in g++ 2.8.x.
-
-@itemize @bullet
-@item
-@cindex integrated libstdc++
-
-The standard C++ classes are integrated with the egcs release (but
-@strong{not} for gcc-2.8.x, which does not include the class libraries).
-libg++ is not being
-supported, though an add-on version that will work with egcs can be found at
-@file{ftp://ftp.yggdrasil.com/private/hjl/libg++-2.8.0b6.6.tar.gz},
-thanks to H.J. Lu.  The compiler and library are configured and built
-in one step.
-
-@item
-@cindex new template implementation
-A completely new template implementation, much closer to the draft
-standard.  Limitations in 2.7.2.x concerning inlining template functions
-are eliminated.  Static template data members, template class member
-functions, partial specification, and default template arguments are
-supported.  An instantiation method resembling that used in Borland C++
-(instantiating functions possibly in multiple .o files and using weak
-symbols to link correctly) is provided, in addition to other
-options.  The SGI version of STL is shipped verbatim with libstdc++
-(libstdc++ is included with egcs, separate with gcc-2.8.x).
-
-@item
-@cindex redundant template elimination
-@cindex templates: removing redundancy
-On ELF platforms (Linux/ELF, Solaris, SVR4), if the GNU linker is used,
-duplicated template functions and virtual function tables are eliminated
-at link time.
-
-@item
-@cindex repository
-@cindex -frepo
-The @code{-frepo} flag is supported in egcs (it is not in 2.8.x).
-However, because of the previous item, I don't recommend its use on ELF
-systems, as the default method is better.
-
-@item
-@cindex new exception implementation
-Exception handling has been re-worked; exceptions will work together
-with optimization.
-Actually, there are two separate implementations: one based on setjmp/longjmp
-and designed to be highly portable, and one designed to be more efficient but
-requiring more processor-specific support (getting exceptions right has proven
-to be extremely difficult and has been the chief obstacle to getting a new
-release out).
-
-@item
-@cindex RTTI
-RTTI has been re-done to work correctly and is on by default.
-
-@item
-@cindex overloading
-Overloading has been re-worked to conform to the latest draft of the
-standard.
-
-@item
-There are many more changes: see @file{http://www.cygnus.com/egcs/c++features.html} for a list.
-@end itemize
-
-Features that are still missing include namespaces and templates as
-template arguments, though there is support for the latter feature
-in the egcs snapshots (which has not yet made it into a release).
-
-@node egcs-bug-fixes, egcs-linux, egcs-whats-new, egcs and 2.8.x
-@section What was fixed in the latest egcs releases?
-
-@itemize @bullet
-
-@item
-Add support for Red Hat 5.0 Linux and better support for Linux
-systems using glibc2.  (1.0.3 was specifically done to fix some
-remaining problems detected when building Red Hat 5.1).
-@item
-Compatibility with both egcs-1.0 and gcc-2.8 libgcc exception handling
-interfaces (see below).
-
-@item
-Various bugfixes in the x86, hppa, mips, and rs6000/ppc backends.
-
-@item 
-A few machine independent bugfixes, mostly to fix code generation bugs
-when building Linux kernels or glibc.
-
-@item 
-Fix a few critical exception handling and template bugs in the C++
-compiler.
-
-@item 
-Fix build problems on x86-solaris systems.
-@end itemize
-
-To avoid future compatibility problems, we strongly urge anyone who is
-planning on distributing shared libraries that contain C++ code to
-upgrade to at least egcs-1.0.1 first (and preferably to 1.0.3).  See
-@file{http://www.cygnus.com/egcs/egcs-1.0.1.html} for details about the
-compatibility issues as well as additional information about the
-bugfixes since the egcs-1.0 release.
-
-@node egcs-linux, egcs-run-both, egcs-bug-fixes, egcs and 2.8.x
-@section If I install egcs on Linux, will it overwrite my libraries?
-
-No.  If you build from sources, by default, egcs installs executables in
-@code{/usr/local/bin} and libraries in @code{/usr/local/lib}, and you
-can change this default if desired (see next section).
-
-If, however, you install a package (e.g. Debian or Red Hat) that wants
-to put egcs in @code{/usr/bin} and @code{/usr/lib}, then yes, you are
-replacing your system compiler and C++ library (I don't know if anyone
-has provided such packages yet -- proceed with caution).
-
-@node egcs-run-both, egcs-vs-2.8.x, egcs-linux, egcs and 2.8.x
-@section How can I run both egcs and an FSF release of g++ on the same machine?
-
-The recommended approach is to provide a different argument to the
-@code{--prefix} flag when you configure egcs.  For example, say
-@code{--prefix=/usr/local/egcs} and then, after installation, you
-can make symbolic links from @file{/usr/local/egcs/bin} to whereever
-you want, for example
-
-@example
-ln -s /usr/local/egcs/bin/gcc /usr/local/bin/egcc
-ln -s /usr/local/egcs/bin/g++ /usr/local/bin/eg++
-@end example
-
-@node egcs-vs-2.8.x, egcs-robustness, egcs-run-both, egcs and 2.8.x
-@section What about 2.8.x?  How does egcs affect the 2.8.x development?
-
-2.8.0 has now been released (followed up by 2.8.1), with essentially the
-same C++ front end as egcs.
-
-Bug fixes generated in egcs will be passed to the 2.8.x releases for
-inclusion; the reverse is also taking place, though a bug fix may
-appear in one before it does in the other.  egcs development is currently
-proceeding much more quickly than gcc 2.8.x development.  However, there
-is essentially only one C++ front end, which is shared by the two
-distinct compiler back ends (however, since egcs-1.0.3 is newer than
-gcc 2.8.1, it has more bug fixes).
-
-@node egcs-robustness,  , egcs-vs-2.8.x, egcs and 2.8.x
-@section How robust is egcs?
-
-While the 'e' stands for 'experimental', egcs has been tested thoroughly
-and should be of high quality.  The author considers egcs 1.0.3 the
-most robust GNU C++ compiler ever produced.
-
-@node installation, evolution, egcs and 2.8.x, Top
-@chapter Installation Issues and Problems
-
-@menu
-* gcc-2 + g++-1::               
-* what else do I need?::        
-* use GNU linker?::             
-* Use GNU assembler?::          
-* shared libraries::            
-* repository::                  
-* repo bugs::                   
-* Use GNU C library?::          
-* Global constructor problems::  
-* Strange assembler errors::    
-* Other problems building libg++::  
-* More size_t problems::        
-* Rebuild libg++?::             
-* co-existing versions::        
-* Installing on Linux::         
-* Linux Slackware 3.0::         
-@end menu
-
-@node gcc-2 + g++-1, what else do I need?, installation, installation
-@section I can't build g++ 1.x.y with gcc-2.x.y!
-
-``I obtained gcc-2.x.y and g++ 1.x.y and I'm trying to build it, but
-I'm having major problems.  What's going on?''
-
-@cindex g++, building 
-If you wish to build g++-1.42, you must obtain gcc-1.42 first.  The
-installation instructions for g++ version 1 leave a lot to be desired,
-unfortunately, and I would recommend that, unless you have a special
-reason for needing the 1.x compiler, that C++ users use the latest
-g++-2.x version, as it
-is the version that is being actively maintained.
-
-@cindex g++, template support
-@cindex Templates
-@cindex ANSI draft standard
-There is no template support in g++-1.x, and it is generally much further
-away from the ANSI draft standard than g++-2.x is.
-
-@node what else do I need?, use GNU linker?, gcc-2 + g++-1, installation
-@section OK, I've obtained gcc; what else do I need?
-
-@cindex libg++
-First off, you'll want libg++ as you can do almost nothing without it
-(unless you replace it with some other class library).
-
-@cindex GNU GAS 
-@cindex GNU GAS [assembler]
-Second, depending on your platform, you may need "GAS", the GNU assembler,
-or the GNU linker (see next question).
-
-@cindex GNU gdb
-Finally, while it is not required, you'll almost certainly want the GNU
-debugger, gdb.  The latest version is
-4.17, released April 27, 1997.
-Other debuggers (like dbx, for example) will normally not be able to
-understand at least some of the debug information produced by g++.
-
-@node use GNU linker?, Use GNU assembler?, what else do I need?, installation
-@section Should I use the GNU linker, or should I use "collect"?
-
-@cindex Linker
-@cindex System VR3, linker
-@cindex System VR4, linker
-First off, for novices: special measures must be taken with C++ to arrange
-for the calling of constructors for global or static objects before the
-execution of your program, and for the calling of destructors at the end.
-(Exception: System VR3 and System VR4 linkers, Linux/ELF, and some other
-systems support user-defined
-segments; g++ on these systems requires neither the GNU linker nor
-collect.  So if you have such a system, the answer is that you don't
-need either one, though using GNU ld does have some advantages over
-the native linker in some cases).
-
-@cindex AT&T cfront
-@cindex Cfront-end
-@cindex collect program
-@cindex GNU linker
-@cindex GNU binutils
-If you have experience with AT&T's "cfront", this function is performed
-there by programs named "patch" or "munch".  With GNU C++, it is performed
-either by the GNU linker or by a program known as "collect".  The collect
-program is part of the gcc-2.x distribution; you can obtain the GNU linker
-separately as part of the "binutils" package.  The latest version of
-binutils is 2.9.1, released May 1, 1998.
-
-Note that if you want to use exceptions on Intel-like platforms and use
-gas (e.g. you run Linux), you need binutils version 2.8.1 or newer for
-exceptions to work correctly!
-
-(To be technical, it's "collect2"; there were originally several
-alternative versions of collect, and this is the one that survived).
-
-There are advantages and disadvantages to either choice.
-
-Advantages of the GNU linker:
-@cindex GNU linker, advantages
-@cindex GNU ld
-@cindex ld [GNU linker]
-
-It's faster than using collect -- collect basically runs the standard Unix
-linker on your program twice, inserting some extra code after the first
-pass to call the constructors.  This is a sizable time penalty for large
-programs.  The GNU linker does not require this extra pass.
-
-GNU ld reports undefined symbols using their true names, not the mangled
-names (but as of 2.7.0 so does collect).
-
-If there are undefined symbols, GNU ld reports which object file(s) refer to
-the undefined symbol(s).  On some OSes (e.g. SunOS, Solaris) the native
-linker does not do this, so you have to track down who's referring to
-the missing symbols yourself.
-
-As of binutils version 2.2, on systems that use the so-called "a.out"
-debug format (e.g. Suns running SunOS 4.x), the GNU linker compresses
-the debug symbol table considerably.  The 2.7 version adds some symbol
-table compression for ELF and Solaris targets.
-
-Users of egcs or 2.8.x on ELF systems should definitely
-use GNU ld (2.8 or later), as it will automatically remove duplicate
-instantiations of templates, virtual function tables, or ``outlined''
-copies of inline functions.
-
-@cindex collect linker, advantages
-Advantages of collect:
-
-@cindex Shared libraries
-If your native linker supports shared libraries, you can use shared
-libraries with collect.  This used to be a strong reason @emph{not}
-to use the GNU linker, but recent versions of GNU ld support linking
-with shared libraries on many platforms, and creating shared libraries
-on a few (such as Intel x86 systems that use ELF object format as well
-as SunOS and Solaris).
-
-@xref{shared libraries}
-
-@cindex GNU linker, porting
-The GNU linker has not been ported to as many platforms as g++ has, so you
-may be forced to use collect.
-
-If you use collect, you don't need to get something extra and figure out
-how to install it; the standard gcc installation procedure will do it for you.
-
-I used to say at this point that I don't see a clear win for either
-linking alternative, but with all the improvements in the GNU linker
-I think that it is now the better choice.  Take your pick.
-
-If you run Linux, the only available linker is the GNU linker.
-
-@node Use GNU assembler?, shared libraries, use GNU linker?, installation
-@section Should I use the GNU assembler, or my vendor's assembler?
-
-@cindex Assembler
-@cindex GNU GAS
-This depends on your platform and your decision about the GNU linker.  For
-most platforms, you'll need to use GAS if you use the GNU linker.  For
-some platforms, you have no choice; check the gcc installation notes to
-see whether you must use GAS.  But you can usually use the vendor's
-assembler if you don't use the GNU linker.
-
-The GNU assembler assembles faster than many native assemblers; however,
-on many platforms it cannot support the local debugging format.
-
-It used to be that the GNU assembler couldn't handle
-position-independent code on SunOS.  This is no longer true if you
-have version 2.6 or newer.
-
-On HPUX or IRIX, you must use GAS (and configure gcc with the
-@code{--with-gnu-as} option) to debug your programs.  GAS is
-strongly recommended particularly on the HP platform because of
-limitations in the HP assembler.
-
-The GNU assembler has been merged with the binutils
-distribution, so the GNU assembler and linker are now together in
-this package (as of binutils version 2.5.1).
-
-On Linux the assembler is the GNU assembler.
-
-@node shared libraries, repository, Use GNU assembler?, installation
-@section How do I build shared libraries with g++?
-
-For gcc-2.7.0 and later, building C++ shared libraries should work fine
-on supported platforms (HPUX 9+, IRIX 5+, DEC UNIX (formerly OSF/1),
-SGI/IRIX, AIX, SunOS 4, Linux/ELF and all targets using SVR4-style ELF shared
-libraries).  There are two separate issues: building libg++ as a shared
-library, and making your own shared libraries.  For libg++ it is simply
-a matter of giving the @code{--enable-shared} option to the configure
-program.  When compiling your own code for shared libraries you
-generally
-must use the @code{-fPIC} flag to get position-independent code.
-
-@cindex -shared flag of gcc
-
-If your shared library contains global or static objects with
-constructors, then make sure to use @code{gcc -shared}, not
-@code{ld}, to create the shared library.  This will make sure
-that any processor-specific magic needed to execute the constructors
-is included.
-
-In theory, constructors for objects in your shared library should be
-called when the library is opened (by dlopen or equivalent).  This
-does not work on some platforms (e.g. SunOS4; it does work on Solaris
-and ELF systems such as Linux): on the broken platforms, the
-constructors are not called correctly.
-
-David Nilsen has suggested the following workaround:
-
-The thing to realize is that if you link your dynamic module with the
-@code{-shared} flag, the collect program nicely groups all the static
-ctors/dtors for you into a list and sets up a function that will call
-them (Note: this means that this trick won't work if you use the GNU
-linker without collect (@pxref{use GNU linker?}).
-
-The magic is knowing these function names.  Currently, they're called:
-
-@example
-_GLOBAL__DI   <-- calls all module constructors
-_GLOBAL__DD   <-- calls all module destructors
-@end example
-
-[ possibly the leading underscore will differ between platforms: jbuck ]
-
-Therefore, if you make a wrapper around dlopen that looks up the
-symbol @code{_GLOBAL__DI} (or @code{__GLOBAL__DI} on SunOS4 machines), and
-calls it, you'll simulate getting the constructors called.
-
-You also need to set up the destructors to be called as well, so you
-need to put a wrapper around dlclose, which will call the
-@code{_GLOBAL__DD} function in the module when/if it's unloaded.
-
-Lastly, to get things 100% correct, you need to set up the destructors
-to also be called if the module is not unloaded, but the main program
-exits.  I do this by registering a single function with @code{atexit()} that
-calls all the destructors left in dynamically loaded modules.
-
-@cindex Shared version of libg++
-Check the file @file{README.SHLIB} from the libg++ distribution for more
-about making and using shared libraries.
-
-@cindex Shared libraries with HP
-
-A patch is needed to build shared versions of version 2.7.2 of libg++
-and libstdc++ on the HP-PA architecture.  You can find the patch at
-@file{ftp://ftp.cygnus.com/pub/g++/libg++-2.7.2-hppa-gcc-fix}.
-
-@node repository, repo bugs, shared libraries, installation
-@section How do I use the new repository code?
-
-@cindex repo patch
-Because there is some disagreement about the details of the template
-repository mechanism, you'll need to obtain a patch from Cygnus Support
-to enable the 2.7.2 repository code.  You can obtain the patch by
-anonymous FTP: @file{ftp://ftp.cygnus.com/pub/g++/gcc-2.7.2-repo.gz}.
-
-There are patches for 2.7.0 and 2.7.1 in the same directory, though
-if you're going to rebuild the compiler you should use the latest one.
-
-@cindex repo patch for BSD
-If you're running NetBSD or BSDI, the Cygnus repo patch is not quite
-correct.  Tim Liddelow has made an alternate version available at
-@file{ftp://ftp.cst.com.au/pub/gcc-2.7.2-repo-bsd.gz}.
-
-After you've applied the patch, the @code{-frepo} flag will enable the
-repository mechanism.  The flag works much like the existing
-@code{-fno-implicit-templates} flag, except that auxiliary files, with
-an @file{.rpo} extension, are built that specify what template
-expansions are needed.  At link time, the (patched) collect program
-detects missing templates and recompiles some of the object files
-so that the required templates are expanded.
-
-Note that the mechanism differs from that of cfront in that template
-definitions still must be visible at the point where they are to be
-expanded.  No assumption is made that @file{foo.C} contains template
-definitions corresponding to template declarations in @file{foo.h}.
-
-@cindex closure with repo
-@cindex template closure
-Jason Merrill writes: ``To perform closure on a set of objects, just try
-to link them together.  It will fail, but as a side effect all needed
-instances will be generated in the objects.''
-
-@node repo bugs, Use GNU C library?, repository, installation
-@section Known bugs and problems with the repo patch
-
-``The @code{-frepo} won't expand templated friend functions!''
-
-This is a known bug; currently you'll have to explicitly instantiate
-friend functions when using @code{-frepo} due to this bug (in 2.7.0
-through 2.7.2 at least).
-
-With earlier versions of the repo patch, there was a bug that happens
-when you have given a quoted command line switch, something like
-
-@example
--D'MESSAGE="hello there"'
-@end example
-
-The repo code tries to recompile files using the same flags you
-originally specified, but doesn't quote arguments that need quoting,
-resulting in failures in some cases.  This is no longer a problem
-with the 2.7.2 patch.
-
-@node Use GNU C library?, Global constructor problems, repo bugs, installation
-@section Should I use the GNU C library?
-
-@cindex GNU C library
-@cindex libg++
-At this point in time, no (unless you are running Linux or the GNU Hurd
-system).  The GNU C library is still very young, and
-libg++ still conflicts with it in some places.  Use your native C library
-unless you know a lot about the gory details of libg++ and gnu-libc.  This
-will probably change in the future.
-
-@node Global constructor problems, Strange assembler errors, Use GNU C library?, installation
-@section Global constructors aren't being called
-
-@cindex global constructors
-``I've installed gcc and it almost works, but constructors and
-destructors for global objects and objects at file scope aren't being
-called.  What did I do wrong?''
-
-@cindex collect program
-It appears that you are running on a platform that requires you to
-install either "collect2" or the GNU linker, and you have done neither.
-For more information, see the section discussing the GNU linker
-(@pxref{use GNU linker?}).
-
-@cindex constructor problems on Solaris
-@cindex Solaris, constructor problems
-On Solaris 2.x, you shouldn't need a collect program and GNU ld doesn't run.
-If your global constructors aren't being called, you may need to install
-a patch, available from Sun, to fix your linker.  The number of the
-``jumbo patch'' that applies is 101409-03.  Thanks to Russell Street
-(r.street@@auckland.ac.nz) for this info.
-
-@cindex IRIX, installing collect
-It appears that on IRIX, the collect2 program is not being installed
-by default during the installation process, though it is required;
-you can install it manually by executing
-
-@example
-make install-collect2
-@end example
-
-from the gcc source directory after installing the compiler.  (I'm
-not certain for which versions of gcc this problem occurs, and whether
-it is still present).
-
-@node Strange assembler errors, Other problems building libg++, Global constructor problems, installation
-@section Strange assembler errors when linking C++ programs
-
-``I've installed gcc and it seemed to go OK, but when I attempt to link
-any C++ program, I'm getting strange errors from the assembler!  How
-can that be?''
-
-The messages in question might look something like
-
-@example
-as: "/usr/tmp/cca14605.s", line 8: error: statement syntax
-as: "/usr/tmp/cca14605.s", line 14: error: statement syntax
-@end example
-
-(on a Sun, different on other platforms).  The important thing is that
-the errors come out at the link step, @emph{not} when a C++ file is
-being compiled.
-
-@cindex nm program
-@cindex GNU nm program
-Here's what's going on: the collect2 program uses the Unix ``nm''
-program to obtain a list of symbols for the global constructors and
-destructors, and it builds a little assembly language module that
-will permit them all to be called.  If you're seeing this symptom,
-you have an old version of GNU nm somewhere on your path.  This old
-version prints out symbol names in a format that the collect2 program
-does not expect, so bad assembly code is generated.
-
-The solution is either to remove the old version of GNU nm from your
-path (and that of everyone else who uses g++), or to install a newer
-version (it is part of the GNU "binutils" package).  Recent versions
-of GNU nm do not have this problem.
-
-@node Other problems building libg++, More size_t problems, Strange assembler errors, installation
-@section Other problems building libg++
-@cindex libg++ on Ultrix
-@cindex libg++ on SunOS
-
-``I am having trouble building libg++.  Help!''
-
-On some platforms (for example, Ultrix), you may see errors complaining
-about being unable to open dummy.o.  On other platforms (for example,
-SunOS), you may see problems having to do with the type of size_t.
-The fix for these problems is to make libg++ by saying "make CC=gcc".
-According to Per Bothner, it should no longer be necessary to specify
-"CC=gcc" for libg++-2.3.1 or later.
-
-``I built and installed libg++, but g++ can't find it.  Help!''
-
-The string given to @file{configure} that identifies your system must
-be the same when you install libg++ as it was when you installed gcc.
-Also, if you used the @code{--prefix} option to install gcc somewhere
-other than @file{/usr/local}, you must use the same value for
-@code{--prefix} when installing libg++, or else g++ will not be able
-to find libg++.
-
-@cindex patch for libg++-2.6.2
-
-The toplevel Makefile in the libg++ 2.6.2 distribution is broken, which
-along with a bug in g++ 2.6.3 causes problems linking programs that use the
-libstdc++ complex classes.  A patch for this is available from
-@file{ftp://ftp.cygnus.com//pub/g++/libg++-2.6.2-fix.gz}.
-
-@node More size_t problems, Rebuild libg++?, Other problems building libg++, installation
-@section But I'm @emph{still} having problems with @code{size_t}!
-
-@cindex Type of size_t
-``I did all that, and I'm @emph{still} having problems with disagreeing
-definitions of size_t, SIZE_TYPE, and the type of functions like
-@code{strlen}.''
-
-@cindex _G_config.h
-The problem may be that you have an old version of @file{_G_config.h}
-lying around.  As of libg++ version 2.4, @file{_G_config.h}, since it is
-platform-specific, is inserted into a different directory; most include
-files are in @file{$prefix/lib/g++-include}, but this file now lives in
-@file{$prefix/$arch/include}.  If, after upgrading your libg++, you find that
-there is an old copy of @file{_G_config.h} left around, remove it,
-otherwise g++ will find the old one first.
-
-@node Rebuild libg++?, co-existing versions, More size_t problems, installation
-@section Do I need to rebuild libg++ to go with my new g++?
-
-``After I upgraded g++ to the latest version, I'm seeing undefined
-symbols.''
-
-or
-
-``If I upgrade to a new version of g++, do I need to reinstall libg++?''
-
-@cindex Incompatibilities between g++ versions
-
-As a rule, the first two digits of your g++ and libg++ should be the
-same.  Normally when you do an upgrade in the ``minor version number''
-(2.5.7 to 2.5.8, say) there isn't a need to rebuild libg++, but there
-have been a couple of exceptions in the past.
-
-@node co-existing versions, Installing on Linux, Rebuild libg++?, installation
-@section I want several versions of g++ and libg++ to co-exist.
-
-I recommend against using the @code{-V} flag to make multiple versions
-of gcc/g++ co-exist, unless they are different minor releases that can use
-the same compiled version of libg++.  The reason is that all these
-versions will try to use the same libg++ version, which usually will
-not work.
-
-Instead, use the @code{--prefix} flag when configuring gcc.  Use a
-different value of @code{--prefix} for each gcc version.  Use the
-same value of @code{--prefix} when configuring libg++.  You can then
-have any number of co-existing gcc/libg++ pairs.  Symbolic links can
-be used so that users don't need to put all these different directories
-on their paths.
-
-One possible system to use is to set @code{--prefix} to
-@file{/usr/local/gcc-2.x.y} for version 2.x.y of gcc, and to link
-whichever version of gcc you wish to be the default into
-@file{/usr/local/bin/gcc} and @file{/usr/local/bin/g++}.
-
-@node Installing on Linux, Linux Slackware 3.0, co-existing versions, installation
-@section Trouble installing g++ and libg++ on Linux
-
-``I've downloaded the latest g++ and libg++ and I'm trying to install
-them on Linux, and I'm having lots of problems.''
-
-@cindex Linux
-FSF releases of libg++ won't install on Linux unchanged, since Linux
-uses are part of the libio library from libg++ for its standard C
-library, only this is changed in a way that it clashes with libg++.
-This means that you'll need a patched version of libg++ for it to
-work.
-
-If you want to upgrade to a new gcc/libg++ combination, the easiest
-thing to do is to grab the prebuilt versions of gcc and libg++ for Linux
-from @file{ftp://tsx-11.mit.edu/pub/linux/packages/GCC}.  Follow the
-directions carefully.  If you want to build from source, you'll need
-a patch for libg++; the Linux developers have named the patched libg++
-version libg++-2.7.1.3 and there is a patch file in the above-named
-directory.
-
-See @file{http://sunsite.unc.edu/LDP/HOWTO/GCC-HOWTO.html},
-the Linux GCC HOWTO, for more on gcc/g++ and Linux.
-
-Linux is in the process of switching over to the GNU C library, version
-2, which will become Linux libc version 6.  Once this process is
-complete, there's a good chance that the installation process on Linux
-will be smoother, but only experts should try making this new library
-work at this point.
-
-@node Linux Slackware 3.0,  , Installing on Linux, installation
-@section Problems with g++ on Linux Slackware 3.0
-
-@cindex Slackware
-@cindex Linux Slackware
-``When I try to compile the traditional Hello, world program on Linux,
-the compiler can't find @file{iostream.h}.  What's the deal?''
-
-You probably have the Slackware 3.0 release.  There's an error in the
-setup.  It's easy to fix, though; log in as root, and make a symbolic
-link:
-
-@example
-ln -s /usr/lib/g++-include /usr/include/g++
-@end example
-
-@node evolution, User Problems, installation, Top
-@chapter The Evolution of g++
-
-This chapter discusses the evolution of g++ and describes what can be expected
-in the future.
-
-@menu
-* version 2.7.x::               What's changed in 2.7.x from earlier versions
-* libstdc++::                   
-@end menu
-
-@node version 2.7.x, libstdc++, evolution, evolution
-@section What's new in version 2.7.x of gcc/g++
-
-[ This section is old now, since 2.8.x/egcs is the new stuff ] The
-latest 2.7.x version was 2.7.2.2, released February 10, 1997.  The only
-change between 2.7.2.1 and 2.7.2.2 is that support was added for using
-the GNU C library, version 2, on Linux; users not interested in that
-functionality have no reason to upgrade.  The previous version of
-gcc/g++ was 2.7.2.1, released August 14, 1996.  The libg++ version that
-should be used with any 2.7.x gcc/g++ is 2.7.2, released July 4, 1996.
-
-Note that gcc 2.7.2.1 just consists of several small patches to
-gcc-2.7.2.  The release is mainly
-intended to fix platform-specific bugs and does not affect the C++
-``front end'' of the compiler (the part that parses your C++ code).
-
-The 2.7.x releases represent a great deal of work on the part of the g++
-maintainers to fix outstanding bugs and move the compiler closer to the
-current ANSI/ISO standards committee's working paper, including
-supporting many of the new features that have been added to the
-language.  I recommend that everyone read the NEWS file contained in the
-distribution (and that system administrators make the file available to
-their users).  I've borrowed liberally from this file here.
-
-@cindex C++ working paper
-If any features seem unfamiliar, you will probably want to
-look at the recently-released public review copy of the C++ Working
-Paper.  A new draft, dated 2 December 1996, has been released for
-public comment.  You can find it on the web at
-@file{http://www.cygnus.com/misc/wp/} or
-@file{http://www.maths.warwick.ac.uk/c++/pub/wp/html/cd2/}.
-See
-@file{http://www.setech.com/x3.html}
-or
-@file{http://www.maths.warwick.ac.uk/c++/pub/} to download the
-document in PostScript, PDF (Adobe Acrobat), HTML, or ASCII
-form.
-
-Here are the main points:
-
-@itemize @bullet
-@item
-@cindex for scope
-As described above, the scope of variables declared in the
-initialization part of a for statement has been changed; such variables
-are now visible only in the loop body.  Use @code{-fno-for-scope} to get
-the old behavior.  You'll need this flag to build groff version 1.09,
-Ptolemy, and many other free software packages.
-
-@item
-@cindex vtable duplication
-Code that does not use #pragma interface/implementation will most
-likely shrink dramatically, as g++ now only emits the vtable for a
-class in the translation unit where its first non-inline, non-abstract
-virtual function is defined.
-
-@item
-@cindex automatic template instantiation
-Support for automatic template instantiation has @emph{not} been enabled
-in the official distribution, due to a disagreement over design philosophies.
-But you can get a patch from Cygnus to turn it on; retrieve the patch
-from @file{ftp://ftp.cygnus.com/pub/g++/gcc-2.7.2-repo.gz} to patch
-gcc-2.7.2 (there are also patches for earlier gcc versions).
-
-@item
-@cindex exception handling, 2.7.0
-
-@xref{exceptions}
-
-@item
-@cindex run-time type identification
-Support for Run-Time Type Identification has been added with @code{-frtti}.
-This support is still in alpha; one major restriction is that any file
-compiled with @code{-frtti} must include @code{<typeinfo>} (@emph{not}
-@code{typeinfo.h} as the NEWS file says).
-Also, all C++ code you link with (including libg++) has to be built with
-@code{-frtti}, so it's still tricky to use.
-
-@item
-@cindex compiler-generated operators
-Synthesis of compiler-generated constructors, destructors and
-assignment operators is now deferred until the functions are used.
-
-@item
-@cindex assignment in conditional expressions
-The parsing of expressions such as @code{a ? b : c = 1}
-has changed from
-@code{(a ? b : c) = 1} to @code{a ? b : (c = 1)}.  This is a new C/C++
-incompatibility brought to you by the ANSI/ISO standards committee.
-
-@item
-@cindex new operator keywords
-The operator keywords and, and_eq, bitand, bitor, compl, not, not_eq,
-or, or_eq, xor and xor_eq are now supported.  Use @code{-ansi} or
-@code{-foperator-names} to enable them.
-
-@item
-@cindex explicit keyword
-The @code{explicit} keyword is now supported.  @code{explicit} is used to mark
-constructors and type conversion operators that should not be used
-implicitly.
-
-@item
-@cindex user-defined type conversion
-Handling of user-defined type conversion has been improved.
-
-@item
-@cindex explicit template instantiation
-Explicit instantiation of template methods is now supported.  Also,
-@code{inline template class foo<int>;}
-can be used to emit only the vtable
-for a template class.
-
-@item
-@cindex -fcheck-new
-With -fcheck-new, g++ will check the return value of all calls to
-operator new, and not attempt to modify a returned null pointer.
-
-@item
-collect2 now demangles linker output, and c++filt has become part of
-the gcc distribution.
-
-@item
-Improvements to template instantiation: only members actually used
-are instantiated.  (Actually this is not quite true: some inline
-templates that are not successfully inlined may be expanded even
-though they are not needed).
-
-@end itemize
-
-@node libstdc++,  , version 2.7.x, evolution
-@section The GNU Standard C++ Library
-
-The GNU Standard C++ Library (also called the ``GNU ANSI C++ Library''
-in places in the code) is not libg++, though it is included in the
-libg++ distribution.  Rather, it contains classes and functions
-required by the ANSI/ISO standard.  The copyright conditions are the
-same as those for for the iostreams classes; the LGPL is not used
-(@pxref{legalities}).
-
-This library, libstdc++, is in the libg++ distribution in versions 2.6.2
-and later.  It requires at least gcc 2.6.3 to build the libg++-2.6.2
-version; use at least gcc 2.7.0 to build the libg++ 2.7.0 version.  It
-contains a hacked-up version of HP's implementation of the Standard
-Template Library (@pxref{Standard Template Library}).  I've
-successfully used this Standard Template Library version to build
-a number of the demos you'll see on various web pages.
-
-As of version 2.7.0, the streams classes are now in libstdc++ instead of
-libg++, and libiostream is being phased out (don't use it).  The g++
-program searches this library.
-
-The maintainers of libg++ have de-emphasized work on the older libg++ classes
-in favor of enhancing libstdc++ to cover the full language, so while libg++
-will always be available, enhancements to it should not be expected.
-
-@node User Problems, legalities, evolution, Top
-@chapter User Problems
-
-@menu
-* missing virtual table::       
-* for scope::                   
-* const constructor::           
-* unused parameter warnings::   
-* jump crosses initialization::  
-* Demangler::                   
-* static data members::         
-* internal compiler error::     
-* bug reports::                 
-* porting to g++::              
-* name mangling::               
-* problems linking with other libraries::  
-* documentation::               
-* templates::                   
-* undefined templates::         
-* redundant templates::         
-* Standard Template Library::   
-* STL and string::              
-* exceptions::                  
-* namespaces::                  
-* agreement with standards::    
-* compiling standard libraries::  
-* debugging on SVR4 systems::   
-* debugging problems on Solaris::  
-* X11 conflicts with libg++::   
-* assignment to streams::       
-@end menu
-
-@node missing virtual table, for scope, User Problems, User Problems
-@section Linker complains about missing virtual table
-
-``I'm getting a message complaining about an undefined virtual table.  Is
-this a compiler bug?''
-
-(On platforms that run neither collect nor the GNU linker, like Solaris,
-you may see an odd undefined symbol like "_vt.3foo", where foo is a
-class name).
-
-This is probably because you are missing a definition for the first
-(non-inline) virtual function of the class.  Since gcc-2.7.0, g++ uses
-a trick borrowed from cfront: the .o file containing the definition for
-the first non-inline virtual function for the class will also contain
-the virtual function table.
-
-@node for scope, const constructor, missing virtual table, User Problems
-@section gcc-2.7.0 breaks declarations in "for" statements!
-
-@cindex declarations in for statements
-@cindex for statements: declarations
-
-gcc-2.7.0 implements the new ANSI/ISO rule on the scope of variables
-declared in for loops.
-
-@example
-for (int i = 1; i <= 10; i++) @{
-        // do something here
-@}
-foo(i);
-@end example
-
-In the above example, most existing C++ compilers would pass the
-value 11 to the function @code{foo}.  In gcc 2.7 and in the ANSI/ISO
-working paper, the scope of @code{i} is only the for loop body, so
-this is an error.  So that old code can be compiled, the new gcc has
-a flag @code{-fno-for-scope} that causes the old rule to be used.
-@cindex -fno-for-scope
-
-As of 2.7.1, the compiler attempts to issue warnings about code that
-has different meanings under the two sets of rules, but the code is
-not perfect: the intent was that code that has valid, but different,
-meanings under the ARM rules and the working paper rules would give
-warnings but have the new behavior, and this doesn't seem to happen.
-
-The @code{-ffor-scope} flag under 2.7.1 and 2.7.2 gives the 2.7.0 behavior.
-
-@node const constructor, unused parameter warnings, for scope, User Problems
-@section g++ seems to want a const constructor.  What's that?
-
-gcc-2.7.1 introduced a bug that causes the compiler to ask for a
-const constructor (there's no such thing in C++) in certain situations
-where a const object appears in a template class.  Most cases have been
-fixed in gcc-2.7.2, but unfortunately not all.  Still, if you're running
-gcc-2.7.1 and have this problem, upgrade to 2.7.2; it is a vast improvement.
-
-@cindex ObjectSpace<STL>
-
-The default constructor for the template @code{pair} in ObjectSpace's
-implementation of STL triggers the bug in one place, for gcc 2.7.2.  If
-you're using ObjectSpace<STL> and having this problem, simply
-change the default constructor from
-
-@example
-os_pair () : first (T1 ()), second (T2 ()) @{@}
-@end example
-
-to just
-
-@example
-os_pair () @{@}
-@end example
-
-Once this is done, ObjectSpace<STL> works fairly well.
-
-@node unused parameter warnings, jump crosses initialization, const constructor, User Problems
-@section How to silence ``unused parameter'' warnings
-
-@cindex -Wall
-@cindex -Wunused
-
-``When I use @code{-Wall} (or @code{-Wunused}), g++ warns about
-unused parameters.  But the parameters have to be there, for use
-in derived class functions.  How do I get g++ to stop complaining?''
-
-The answer is to simply omit the names of the unused parameters when
-defining the function.  This makes clear, both to g++ and to readers
-of your code, that the parameter is unused.  For example:
-
-@example
-int Foo::bar(int arg) @{ return 0; @}
-@end example
-
-will give a warning for the unused parameter @code{arg}.  To suppress
-the warning write
-
-@example
-int Foo::bar(int) @{ return 0; @}
-@end example
-
-@node jump crosses initialization, Demangler, unused parameter warnings, User Problems
-@section g++ objects to a declaration in a case statement
-
-``The compiler objects to my declaring a variable in one of the branches
-of a case statement.  Earlier versions used to accept this code.  Why?''
-
-The draft standard does not allow a goto or a jump to a case label to
-skip over an initialization of a variable or a class object.  For
-example:
-
-@example
-switch ( i ) @{
-  case 1:
-    Object obj(0);
-        ...
-    break;
-  case 2:
-       ...
-    break;
-@}    
-@end example
-
-The reason is that @code{obj} is also in scope in the rest of the switch
-statement.
-
-As of version 2.7.0, the compiler will object that the jump to the
-second case level crosses the initialization of @code{obj}.  Older
-compiler versions would object only if class Object has a destructor.
-In either case, the solution is to add a set of curly braces around
-the case branch:
-
-@example
-  case 1:
-    @{
-       Object obj(0);
-        ...
-       break;
-    @}
-@end example
-
-@node Demangler, static data members, jump crosses initialization, User Problems
-@section Where can I find a demangler?
-
-@cindex demangler program
-A g++-compatible demangler named @code{c++filt} can be found in the
-@file{binutils} distribution.  This distribution (which also contains
-the GNU linker) can be found at any GNU archive site.
-
-As of version 2.7.0, @code{c++filt} is included with gcc and is
-installed automatically.  Even better, it is used by the @code{collect}
-linker, so you don't see mangled symbols anymore (except on platforms
-that use neither collect nor the GNU linker, like Solaris).
-
-@node static data members, internal compiler error, Demangler, User Problems
-@section Linker reports undefined symbols for static data members
-
-@cindex Static data members
-``g++ reports undefined symbols for all my static data members when I link,
-even though the program works correctly for compiler XYZ.  What's going on?''
-
-The problem is almost certainly that you don't give definitions for
-your static data members.  If you have
-
-@example
-class Foo @{
-       ...
-       void method();
-       static int bar;
-@};
-@end example
-
-you have only declared that there is an int named Foo::bar and a member
-function named Foo::method that is defined somewhere.  You still need to
-define @emph{both} method() and bar in some source file.  According to
-the draft ANSI standard, you must supply an initializer, such as
-
-@example
-int Foo::bar = 0;
-@end example
-
-@noindent
-in one (and only one) source file.
-
-@node internal compiler error, bug reports, static data members, User Problems
-@section What does ``Internal compiler error'' mean?
-
-It means that the compiler has detected a bug in itself.  Unfortunately,
-g++ still has many bugs, though it is a lot better than it used to be.
-If you see this message, please send in a complete bug report (see next
-section).
-
-@node bug reports, porting to g++, internal compiler error, User Problems
-@section I think I have found a bug in g++.
-
-@cindex Bug in g++, newly found
-``I think I have found a bug in g++, but I'm not sure.  How do I know,
-and who should I tell?''
-
-@cindex Manual, for gcc
-First, see the excellent section on bugs and bug reports in the gcc manual
-(which is included in the gcc distribution).  As a short summary of that
-section: if the compiler gets a fatal signal, for any input, it's a bug
-(newer versions of g++ will ask you to send in a bug report when they
-detect an error in themselves).  Same thing for producing invalid
-assembly code.
-
-When you report a bug, make sure to describe your platform (the type of
-computer, and the version of the operating system it is running) and the
-version of the compiler that you are running.  See the output of the
-command @code{g++ -v} if you aren't sure.  Also provide enough code
-so that the g++ maintainers can duplicate your bug.  Remember that the
-maintainers won't have your header files; one possibility is to send
-the output of the preprocessor (use @code{g++ -E} to get this).  This
-is what a ``complete bug report'' means.
-
-I will add some extra notes that are C++-specific, since the notes from
-the gcc documentation are generally C-specific.
-
-@cindex g++ bug report
-First, mail your bug report to "bug-g++@@prep.ai.mit.edu".  You may also
-post to @file{gnu.g++.bug}, but it's better to use mail, particularly if you
-have any doubt as to whether your news software generates correct reply
-addresses.  Don't mail C++ bugs to bug-gcc@@prep.ai.mit.edu.
-
-@strong{News:} as I write this (late February 1996) the gateway
-connecting the bug-g++ mailing list and the @file{gnu.g++.bug} newsgroup
-is (temporarily?) broken.  Please mail, do not post bug reports.
-
-@cindex libg++ bug report
-If your bug involves libg++ rather than the compiler, mail to
-bug-lib-g++@@prep.ai.mit.edu.  If you're not sure, choose one, and if you
-guessed wrong, the maintainers will forward it to the other list.
-
-@cindex C++, reference books
-@cindex ARM [Annotated C++ Ref Manual]
-Second, if your program does one thing, and you think it should do
-something else, it is best to consult a good reference if in doubt.
-The standard reference is the draft working paper from the ANSI/ISO
-C++ standardization committee, which you can get on the net.
-For PostScript and PDF (Adobe Acrobat) versions, see the
-archive at @file{ftp://research.att.com/dist/stdc++/WP}.  For HTML and ASCII
-versions, see @file{ftp://ftp.cygnus.com/pub/g++}.  On the World Wide Web, see
-@file{http://www.cygnus.com/misc/wp/}.
-
-An older
-standard reference is "The Annotated C++ Reference Manual", by Ellis and
-Stroustrup (copyright 1990, ISBN #0-201-51459-1).  This is what they're
-talking about on the net when they refer to ``the ARM''.  But you should
-know that vast changes have been made to the language since then.
-
-The ANSI/ISO C++ standards committee have adopted some changes to the
-C++ language since the publication of the original ARM, and newer
-versions of g++ (2.5.x and later) support some of these changes, notably
-the mutable keyword (added in 2.5.0), the bool type (added in 2.6.0),
-and changes in the scope of variables defined in for statements (added
-in 2.7.0).
-You can obtain an addendum to the ARM explaining many of these changes by FTP
-from @file{ftp://ftp.std.com/AW/stroustrup2e/new_iso.ps}.
-
-@cindex AT&T cfront
-Note that the behavior of (any version of) AT&T's "cfront" compiler is
-NOT the standard for the language.
-
-@node porting to g++, name mangling, bug reports, User Problems
-@section Porting programs from other compilers to g++
-
-``I have a program that runs on <some other C++ compiler>, and I want
-to get it running under g++.  Is there anything I should watch out
-for?''
-
-@cindex Porting to g++
-
-Note that g++ supports many of the newer keywords that have recently
-been added to the language.  Your other C++ compiler may not support
-them, so you may need to rename variables and members that conflict
-with these keywords.
-
-There are two other reasons why a program that worked under one compiler
-might fail under another: your program may depend on the order of
-evaluation of side effects in an expression, or it may depend on the
-lifetime of a temporary (you may be assuming that a temporary object
-"lives" longer than the standard guarantees).  As an example of the
-first:
-
-@example
-void func(int,int);
-
-int i = 3;
-func(i++,i++);
-@end example
-
-@cindex Order of evaluation, problems in porting
-Novice programmers think that the increments will be evaluated in strict
-left-to-right order.  Neither C nor C++ guarantees this; the second
-increment might happen first, for example.  func might get 3,4, or it
-might get 4,3.
-
-@cindex Classes, problems in porting
-@cindex Problems in porting, class
-The second problem often happens with classes like the libg++ String
-class.  Let's say I have
-
-@example
-String func1();
-void func2(const char*);
-@end example
-
-and I say
-
-@example
-func2(func1());
-@end example
-
-because I know that class String has an "operator const char*".  So what
-really happens is
-
-@example
-func2(func1().convert());
-@end example
-
-@cindex temporaries
-where I'm pretending I have a convert() method that is the same as the
-cast.  This is unsafe in g++ versions before 2.6.0, because the
-temporary String object may be deleted after its last use (the call to
-the conversion function), leaving the pointer pointing to garbage, so by
-the time func2 is called, it gets an invalid argument.
-
-@cindex ANSI draft standard
-Both the cfront and the old g++ behaviors are legal according to the ARM,
-but the powers that be have decided that compiler writers were given
-too much freedom here.
-
-The ANSI C++ committee has now come to a resolution of the lifetime of
-temporaries problem: they specify that temporaries should be deleted at
-end-of-statement (and at a couple of other points).  This means that g++
-versions before 2.6.0 now delete temporaries too early, and cfront
-deletes temporaries too late.  As of version 2.6.0, g++ does things
-according to the new standard.
-
-@cindex Scope, problems in porting
-@cindex Problems in porting, scope
-For now, the safe way to write such code is to give the temporary a name,
-which forces it to live until the end of the scope of the name. For
-example:
-
-@example
-String& tmp = func1();
-func2(tmp);
-@end example
-
-Finally, like all compilers (but especially C++ compilers, it seems),
-g++ has bugs, and you may have tweaked one.  If so, please file a bug
-report (after checking the above issues).
-
-@node name mangling, problems linking with other libraries, porting to g++, User Problems
-@section Why does g++ mangle names differently from other C++ compilers?
-
-See the answer to the next question.
-@cindex Mangling names
-
-@node problems linking with other libraries, documentation, name mangling, User Problems
-@section Why can't g++ code link with code from other C++ compilers?
-
-``Why can't I link g++-compiled programs against libraries compiled by
-some other C++ compiler?''
-
-@cindex Mangling names
-@cindex Cygnus Support
-Some people think that,
-if only the FSF and Cygnus Support folks would stop being
-stubborn and mangle names the same way that, say, cfront does, then any
-g++-compiled program would link successfully against any cfront-compiled
-library and vice versa.  Name mangling is the least of the problems.
-Compilers differ as to how objects are laid out, how multiple inheritance
-is implemented, how virtual function calls are handled, and so on, so if
-the name mangling were made the same, your programs would link against
-libraries provided from other compilers but then crash when run.  For this
-reason, the ARM @emph{encourages} compiler writers to make their name mangling
-different from that of other compilers for the same platform.
-Incompatible libraries are then detected at link time, rather than at run
-time.
-@cindex ARM [Annotated C++ Ref Manual]
-@cindex Compiler differences
-
-@node documentation, templates, problems linking with other libraries, User Problems
-@section What documentation exists for g++ 2.x?
-
-@cindex g++, documentation
-Relatively little.
-While the gcc manual that comes with the distribution has some coverage
-of the C++ part of the compiler, it focuses mainly on the C compiler
-(though the information on the ``back end'' pertains to C++ as well).
-Still, there is useful information on the command line options and the
-#pragma interface and #pragma implementation directives in the manual,
-and there is a useful section on template instantiation in the 2.6 version.
-There is a Unix-style manual entry, "g++.1", in the gcc-2.x
-distribution; the information here is a subset of what is in the manual.
-
-You can buy a nicely printed and bound copy of this manual from the FSF;
-see above for ordering information.
-
-A draft of a document describing the g++ internals appears in the gcc
-distribution (called g++int.texi); it is incomplete but gives lots of
-information.
-
-For class libraries, there are several resources available:
-
-@itemize @bullet
-@item
-The libg++ distribution has a manual
-@file{libg++/libg++.texi} describing the old libg++ classes, and
-another manual @file{libio/iostream.texi} describing the iostreams
-implementation.
-@item
-While there is no libg++-specific document describing the STL
-implementation, SGI's web site, at
-@file{http://www.sgi.com/Technology/STL/}, is an excellent resource.
-Note that the SGI version of STL is the one that is included with the
-egcs and 2.8.x releases of g++/libstdc++.
-
-@end itemize
-
-@node templates, undefined templates, documentation, User Problems
-@section Problems with the template implementation
-
-@cindex g++, template support
-@cindex Templates
-
-g++ does not implement a separate pass to instantiate template functions
-and classes at this point; for this reason, it will not work, for the most
-part, to declare your template functions in one file and define them in
-another.  The compiler will need to see the entire definition of the
-function, and will generate a static copy of the function in each file
-in which it is used.
-
-(The experimental template repository code (@pxref{repository}) that
-can be added to 2.7.0 or later does implement a separate pass, but there
-is still no searching of files that the compiler never saw).
-
-As of 2.8.x and egcs-1.0.x, the template implementation has most
-of the features specified in the draft standard.  Still missing are
-template arguments that are themselves templates; however, template
-class member functions work, and most of the limitations of the older
-g++ versions are fixed.
-
-I think that given this new implementation, it should not be necessary
-for users to mess around with switches like @code{-fno-implicit-templates}
-and @code{#pragma} directives; most of the time, the default behavior
-will work OK.  Users of older versions might want to read on.
-
-@cindex -fno-implicit-templates
-For version 2.6.0, however, a new switch @code{-fno-implicit-templates}
-was added; with this switch, templates are expanded only under user
-control.  I recommend that all g++ users that use templates read the
-section ``Template Instantiation'' in the gcc manual (version 2.6.x
-and newer).  g++ now supports explicit template expansion using the
-syntax from the latest C++ working paper:
-
-@example
-template class A<int>;
-template ostream& operator << (ostream&, const A<int>&);
-@end example
-
-@cindex template limitations
-As of version 2.7.2, there are still a few limitations in the template
-implementation besides the above (thanks to Jason Merrill for this info):
-
-@strong{Note}: these problems are eliminated in egcs and in gcc-2.8.x.
-
-@enumerate 1
-@item
-Static data member templates are not supported in compiler versions older
-than 2.8.0.  You can work around
-this by explicitly declaring the static variable for each template
-specialization:
-
-@example
-template <class T> struct A @{
-  static T t;
-@};
-
-template <class T> T A<T>::t = 0; // gets bogus error
-int A<int>::t = 0;                // OK (workaround)
-@end example
-
-@item
-Template member names are not available when defining member function
-templates.
-
-@example
-template <class T> struct A @{
-  typedef T foo;
-  void f (foo);
-  void g (foo arg) @{ ... @}; // this works
-@};
-
-template <class T> void A<T>::f (foo) @{ @} // gets bogus error
-@end example
-
-@item
-Templates are instantiated using the parser.  This results in two
-problems (again, these problems are fixed in 2.8.0 and egcs):
-
-a) Class templates are instantiated in some situations where such
-instantiation should not occur.
-
-@example
-template <class T> class A @{ @};
-A<int> *aip = 0; // should not instantiate A<int> (but does)
-@end example
-
-b) Function templates cannot be inlined at the site of their
-instantiation.
-
-@example
-template <class T> inline T min (T a, T b) @{ return a < b ? a : b; @}
-
-void f () @{
-  int i = min (1, 0);           // not inlined
-@}
-
-void g () @{
-  int j = min (1, 0);           // inlined
-@}
-@end example
-
-A workaround that works in version 2.6.1 through 2.7.2.x is to specify
-
-@example
-extern template int min (int, int);
-@end example
-
-before @code{f()}; this will force it to be instantiated (though not
-emitted). 
-
-@strong{Note:} this kind of ``guiding declaration'' is not standard and
-isn't supported by egcs or gcc-2.8.x, as the standard says that this
-declares a ``normal'' @code{min} function which has no relation to
-the template function @code{min<int>(int,int)}.  But then the new
-compilers have no problem inlining template functions.
-
-@item
-Member function templates are always instantiated when their containing
-class is.  This is wrong (fixed in egcs/2.8).
-@end enumerate
-
-@node undefined templates, redundant templates, templates, User Problems
-@section I get undefined symbols when using templates
-
-(Thanks to Jason Merrill for this section).
-
-@cindex template instantiation
-g++ does not automatically instantiate templates defined in other files.
-Because of this, code written for cfront will often produce undefined
-symbol errors when compiled with g++.  You need to tell g++ which template
-instances you want, by explicitly instantiating them in the file where they
-are defined.  For instance, given the files
-
-@file{templates.h}:
-@example
-template <class T>
-class A @{
-public:
-  void f ();
-  T t;
-@};
-
-template <class T> void g (T a);
-@end example
-
-@file{templates.cc}:
-@example
-#include "templates.h"
-
-template <class T>
-void A<T>::f () @{ @}
-
-template <class T>
-void g (T a) @{ @}
-@end example
-
-
-main.cc:
-@example
-#include "templates.h"
-
-main ()
-@{
-  A<int> a;
-  a.f ();
-  g (a);
-@}
-@end example
-
-compiling everything with @code{g++ main.cc templates.cc} will result in
-undefined symbol errors for @samp{A<int>::f ()} and @samp{g (A<int>)}.  To
-fix these errors, add the lines
-
-@example
-template class A<int>;
-template void g (A<int>);
-@end example
-
-to the bottom of @samp{templates.cc} and recompile.
-
-@node redundant templates, Standard Template Library, undefined templates, User Problems
-@section I get multiply defined symbols using templates
-
-You may be running into a bug that was introduced in version 2.6.1
-(and is still present in 2.6.3) that generated external linkage
-for templates even when neither @code{-fexternal-templates} nor
-@code{-fno-implicit-templates} is specified.  There is a patch for
-this problem at @*
-@file{ftp://ftp.cygnus.com/pub/g++/gcc-2.6.3-template-fix}.
-
-I recommend either applying the patch or
-using @code{-fno-implicit-templates}
-together with explicit template instantiation as described in previous
-sections.
-
-This bug is fixed in 2.7.0.
-
-@node Standard Template Library, STL and string, redundant templates, User Problems
-@section Does g++ support the Standard Template Library?
-
-If you want to use the Standard Template Library, do not pass go,
-upgrade immediately to gcc-2.8.x or to egcs.  The new C++ front end
-handles STL very well, and the high-quality implementation of STL
-from SGI is included verbatim as part of the libstdc++ class library.
-
-If for some reason you must use 2.7.2, you can probably get by with
-the hacked-up version of the old implementation from HP that is
-included with libg++-2.7.2, but it is definitely inferior and has more
-problems.  Alternatively, g++ 2.7.2.x users might try the following:
-a group at the Moscow Center for Sparc Technology has
-a port of the SGI STL implementation that mostly works with gcc-2.7.2.
-See
-@file{http://www.ipmce.su/people/fbp/stl/stlport.html}.
-
-Mumit Khan has produced an ``STL newbie guide'' with lots of information
-on using STL with gcc.  See
-
-@file{http://www.xraylith.wisc.edu/~khan/software/stl/STL.newbie.html}
-
-@node STL and string, exceptions, Standard Template Library, User Problems
-@section I'm having problems mixing STL and the standard string class
-
-[ This section is for g++ 2.7.2.x users only ]
-
-This is due to a bug in g++ version 2.7.2 and 2.7.2.1; the compiler
-is confused by the operator declarations.  There is an easy workaround,
-however; just make sure that the @code{<string>} header is included
-before any STL headers.  That is, just say
-
-@example
-#include <string>
-@end example
-
-before any other @code{#include} directives.
-
-Unfortunately, this doesn't solve all problems; you may still have
-difficulty with the relational operators !=, <=, >, and >=, thanks
-to a conflict with the very general definition of these operators
-in function.h.  One trick that sometimes works is to try to use ==
-and < in your code instead of the other operators.  Another is to
-use a derived class of <string>.  The only completely satisfactory
-solution, I'm afraid, is to wait for the new release.
-
-@node exceptions, namespaces, STL and string, User Problems
-@section Problems and limitations with exceptions
-
-The first really usable exceptions implementations are in 2.8.x and
-egcs.  With these versions, exceptions are enabled by default; use
--fno-exceptions to disable exceptions.
-
-However, 2.8.1 still has not integrated egcs work that computes an
-accurate control flow graph in the presence of exceptions.  For this
-reason, you will sometimes get bogus warnings when compiling with 2.8.1,
--O, and -Wall, about uninitialized variables and the like.
-
-2.7.2.x has very limited and partially broken support for exceptions.
-With that compiler, you must
-provide the @code{-fhandle-exceptions} flag to enable exception
-handling.  In version 2.7.2 and older, exceptions may not work properly
-(and you may get odd error messages when compiling) if you turn
-on optimization (the @code{-O} flag).  If you care about exceptions,
-please upgrade to a newer compiler!
-
-In 2.7.2, you must give the @code{-frtti} switch to enable catching
-of derived exception objects with handlers for the base exception class;
-if @code{-frtti} is not given, only exact type matching works.
-
-For exception handling to work with 2.7.0 your CPU must be a SPARC,
-RS6000/PowerPC, 386/486/Pentium, or ARM.  Release 2.7.1 added support
-for the Alpha, and ``m68k is rumored to work on some platforms''
-and ``VAX may also work'' (according to Mike Stump).
-@emph{It still doesn't work on HP-PA or MIPS platforms.}
-
-Exception handling adds space overhead (the size of the executable
-grows); the problem is worse on the ix86 (Intel-like) architecture
-than on RISC architectures.  The extra exceptions code is generated
-in a separate program section and is only paged in if an exception
-is thrown, so the cost is in disk, not in RAM or CPU.
-
-Exception overhead is much lower on ix86 if you use binutils 2.9 or
-later, as gas (the GNU assembler) can now compress the information.
-
-@node namespaces, agreement with standards, exceptions, User Problems
-@section Does g++ support namespaces?
-
-As of version 2.7.2, g++ recognizes the keywords @code{namespace} and
-@code{using}, and there is some rudimentary code present, but almost
-nothing connected with namespaces works yet.
-The new versions (2.8.x/egcs) still lack namespace support, but to help
-compile standard programs they make
-
-@example
-using namespace std;
-@end example
-
-a no-op.  There is namespace implementation work going on in the egcs
-snapshots (but it hasn't been released yet).
-
-@node agreement with standards, compiling standard libraries, namespaces, User Problems
-@section What are the differences between g++ and the ARM specification of C++?
-
-@cindex ARM [Annotated C++ Ref Manual]
-@cindex exceptions
-
-Up until recently, there was no really usable exception support.  If you
-need exceptions, you want gcc-2.8.x or egcs.  The implementation works
-fairly well.  The 2.7.x version was strictly alpha quality and quite
-fragile.
-
-@cindex mutable
-Some features that the ANSI/ISO standardization committee has voted in
-that don't appear in the ARM are supported, notably the @code{mutable}
-keyword, in version 2.5.x.  2.6.x added support for the built-in boolean
-type @code{bool}, with constants @code{true} and @code{false}.  Run-time
-type identification was rudimentary in 2.7.x but is fully supported in
-2.8.x, so there are
-more reserved words: @code{typeid}, @code{static_cast},
-@code{reinterpret_cast}, @code{const_cast}, and @code{dynamic_cast}.
-
-@cindex g++ bugs
-As with any beta-test compiler, there are bugs.  You can help improve
-the compiler by submitting detailed bug reports.
-
-[ This paragraph obsoleted by 2.8.x/egcs: ]
-One of the weakest areas of g++ other than templates is the resolution
-of overloaded functions and operators in complex cases.  The usual
-symptom is that in a case where the ARM says that it is ambiguous which
-function should be chosen, g++ chooses one (often the first one
-declared).  This is usually not a problem when porting C++ code from
-other compilers to g++, but shows up as errors when code developed under
-g++ is ported to other compilers.  (I believe this is no longer a
-significant problem in 2.7.0 or later).
-
-[A full bug list would be very long indeed, so I won't put one here;
-the sheer complexity of the C++ language means that every compiler I've
-tried has some problems. 2.8.x and egcs are a big improvement]
-
-@node compiling standard libraries, debugging on SVR4 systems, agreement with standards, User Problems
-@section Will g++ compile InterViews?  The NIH class library?  Rogue Wave?
-
-@cindex NIH class library
-@cindex NIHCL with g++
-The NIH class library uses a non-portable, compiler-dependent hack
-to initialize itself, which makes life difficult for g++ users.
-It will not work without modification, and I don't know what modifications
-are required or whether anyone has done them successfully.
-
-In short, it's not going to happen any time soon (previous FAQs referred
-to patches that a new NIHCL release would hopefully contain, but this
-hasn't happened).
-
-@strong{Note:} I thought I saw an item indicating that someone
-@emph{had} patched NIHCL to work with g++.  Any pointers?
-
-@cindex InterViews
-I think that as of version 2.5.6, the standard g++ will compile the
-standard 3.1 InterViews completely successfully.
-Note that you'll need the @code{-fno-for-scope} flag
-if you use gcc-2.7.0; with 2.7.2 you may be able to omit this flag
-but you'll get warnings.
-
-@cindex Rogue Wave
-According to Jason Merrill, gcc-2.7.0 and newer works with Rogue
-Wave's @code{tools.h++} class library, but you may want to grab
-@file{ftp://ftp.cygnus.com/pub/g++/Tools.h++-6.1-patch}.  Again,
-you'll need the @code{-fno-for-scope} flag since Rogue Wave hasn't
-fixed their code to comply with the new standard yet.
-
-@node debugging on SVR4 systems, debugging problems on Solaris, compiling standard libraries, User Problems
-@section Debugging on SVR4 systems
-@cindex System VR4, debugging
-
-``How do I get debugging to work on my System V Release 4 system?''
-
-@cindex DWARF debug format
-
-Most systems based on System V Release 4 (except Solaris) encode symbolic
-debugging information in a format known as `DWARF'.  There are two forms
-of DWARF, DWARF 1 and DWARF 2.  The default is often DWARF 1, which is
-not really expressive enough to do C++ correctly.
-
-Now that we have gdb 4.17, DWARF debugging is finally supported (if
-you use gcc 2.8.1 or egcs-1.0.x or newer).
-
-@cindex stabs
-@cindex --with-stabs
-
-For users of older versions of the tools, you @emph{can} get g++ debugging under SVR4 systems by
-configuring gcc with the @code{--with-stabs} option.  This causes gcc to
-use an alternate debugging format, one more like that used under SunOS4.
-You won't need to do anything special to GDB; it will always understand
-the ``stabs'' format.
-
-To specify DWARF 2 output on Unixware, you can give the @code{-ggdb}
-switch; alternatively, @code{-gstabs} produces ``stabs'' format.
-
-@node debugging problems on Solaris, X11 conflicts with libg++, debugging on SVR4 systems, User Problems
-@section debugging problems on Solaris
-
-``I'm on Solaris, and gdb says it doesn't know about some of my local
-symbols.  Help!''
-
-This problem was introduced in gcc 2.7.2; debug symbols for
-locals that aren't declared at the beginning of a block come out in the
-wrong order, and gdb can't find such symbols.
-
-This problem is fixed in gcc-2.7.2.1.
-
-@node X11 conflicts with libg++, assignment to streams, debugging problems on Solaris, User Problems
-@section X11 conflicts with libg++ in definition of String
-@cindex String, conflicts in definition
-
-``X11 and Motif define String, and this conflicts with the String class
-in libg++.  How can I use both together?''
-
-One possible method is the following:
-
-@example
-#define String XString
-#include <X11/Intrinsic.h>
-/* include other X11 and Motif headers */
-#undef String
-@end example
-
-and remember to use the correct @code{String} or @code{XString} when
-you declare things later.
-
-@node assignment to streams,  , X11 conflicts with libg++, User Problems
-@section Why can't I assign one stream to another?
-
-[ Thanks to Per Bothner and Jerry Schwarz for this section. ]
-
-Assigning one stream to another seems like a reasonable thing to do, but
-it's a bad idea.  Usually, this comes up because people want to assign
-to @code{cout}.  This is poor style, especially for libraries, and is
-contrary to good object-oriented design.  (Libraries that write directly
-to @code{cout} are less flexible, modular, and object-oriented).
-
-The iostream classes do not allow assigning to arbitrary streams, because
-this can violate typing:
-
-@example
-ifstream foo ("foo");
-istrstream str(...);
-foo = str;
-foo->close ();  /* Oops! Not defined for istrstream! */
-@end example
-
-@cindex assignment to cout
-
-The original cfront implementation of iostreams by Jerry Schwarz allows
-you to assign to @code{cin}, @code{cout}, @code{cerr}, and @code{clog},
-but this is not part of the draft standard for iostreams and generally
-isn't considered a good idea, so standard-conforming code shouldn't use
-this technique.
-
-The GNU implementation of iostream did not support assigning to 
-@code{cin}, @code{cout}, @code{cerr}, and @code{clog}
-for quite a while, but it now does, for backward
-compatibility with cfront iostream (versions 2.6.1 and later of libg++).
-
-The ANSI/ISO C++ Working Paper does provide ways of changing the
-streambuf associated with a stream.  Assignment isn't allowed;
-there is an explicit named member that must be used.
-
-However, it is not wise to do this, and the results are confusing.  For
-example: @code{fstream::rdbuf} is supposed to return the @emph{original}
-filebuf, not the one you assigned. (This is not yet implemented in GNU
-iostream.)  This must be so because @code{fstream::rdbuf} is defined to
-return a @code{filebuf *}.
-
-@node legalities, index, User Problems, Top
-@chapter What are the rules for shipping code built with g++ and libg++?
-@cindex Shipping rules
-@cindex GPL [GNU Public License]
-
-``Is it is possible to distribute programs for profit that are created
-with g++ and use the g++ libraries?''
-
-I am not a lawyer, and this is not legal advice.  In any case, I have
-little interest in telling people how to violate the spirit of the
-GNU licenses without violating the letter.  This section tells you
-how to comply with the intention of the GNU licenses as best I understand
-them.
-
-@cindex FSF [Free Software Foundation]
-The FSF has no objection to your making money.  Its only interest is that
-source code to their programs, and libraries, and to modified versions of
-their programs and libraries, is always available.
-
-The short answer is that you do not need to release the source to
-your program, but you can't just ship a stripped executable either,
-unless you use only the subset of libg++ that includes the iostreams
-classes (see discussion below) or the new libstdc++ library (available
-in libg++ 2.6.2 and later).
-
-Compiling your code with a GNU compiler does not affect its copyright;
-it is still yours.  However, in order to ship code that links in a GNU
-library such as libg++ there are certain rules you must follow.  The
-rules are described in the file COPYING.LIB that accompanies gcc
-distributions; it is also included in the libg++ distribution.
-See that file for the exact rules.  The agreement is called the
-Library GNU Public License or LGPL.  It is much "looser" than the
-GNU Public License, or GPL, that covers must GNU programs.
-
-@cindex libg++, shipping code
-Here's the deal: let's say that you use some version of libg++,
-completely unchanged, in your software, and you want to ship only
-a binary form of your code.  You can do this, but there are several
-special requirements.  If you want to use libg++ but ship only object
-code for your code, you have to ship source for libg++ (or ensure
-somehow that your customer already has the source for the exact
-version you are using), and ship your application in linkable form.
-You cannot forbid your customer from reverse-engineering or extending
-your program by exploiting its linkable form.
-
-@cindex libg++, modifying
-Furthermore, if you modify libg++ itself, you must provide source
-for your modifications (making a derived class does not count as
-modifying the library -- that is "a work that uses the library").
-
-@cindex special copying conditions for iostreams
-For certain portions of libg++ that implement required parts of the C++
-language (such as iostreams and other standard classes), the FSF has
-loosened the copyright requirement still more by adding the ``special
-exception'' clause, which reads as follows:
-
-@quotation
-As a special exception, if you link this library with files
-compiled with GCC 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.
-@end quotation
-
-If your only use of libg++ uses code with this exception, you may ship
-stripped executables or license your executables under different
-conditions without fear of violating an FSF copyright.  It is the intent
-of FSF and Cygnus that, as the other classes required by the ANSI/ISO
-draft standard are developed, these will also be placed under this
-``special exception'' license.
-The code in the new libstdc++ library, intended to implement standard
-classes as defined by ANSI/ISO, is also licensed this way.
-
-To avoid coming under the influence of the LGPL, you can link with
-@file{-liostream} rather than @file{-lg++} (for version 2.6.x and
-earlier), or @file{-lstdc++} now that it is available.  In version 2.7.0
-all the standard classes are in @file{-lstdc++}; you can do the link
-step with @code{c++} instead of @code{g++} to search only the
-@file{-lstdc++} library and avoid the LGPL'ed code in @file{-lg++}.
-
-Note that in egcs and in gcc-2.8.x, if you do not
-specify any libraries the @code{g++} command will only link in
-@file{-lstdc++}, so your executable will not be affected by the LGPL
-(unless you link in some other LGPLed library: the GNU C library used
-on GNU/Linux systems is one such library).
-
-If you wish to discuss legal issues connected with GNU software on the
-net, please use @file{gnu.misc.discuss}, not the technical newsgroups.
-
-@node index,  , legalities, Top
-@comment  node-name,  next,  previous,  up
-@appendix Concept Index
-
-@printindex cp
-
-@page
-@contents
-@bye