The GNU C++ compiler
====================

Introduction
------------

This is a port of the GNU C++ compiler (version 2.7.2) for the C++
programming language to the Acorn range of ARM based machines, running
under RISC OS. As such, this package is covered by the FSF General
Public License (see the files docs.COPYING and docs.COPYINGLIB for details).

This port is  1996 Nick Burrett

As with GNU programs, THERE IS NO WARRANTY OF ANY SORT

This compiler requires a minimum 3200Kb of free RAM for compilations.

Thanks go to various people for the help and assistance that they have
given me during the creation of this port. These are:

Simon Callan for allowing me to modify UnixLib.


Files
-----

This is a binary distribution only and consists of the following files:

  bin.cc1plus       The C++ compiler
  bin.g++           The C++ compiler front end

The compiler sources (about 27Mb) can be obtained from the sites listed at
the end of docs.!Intro.

Installation
------------

Before attempting to use GNU C, it should be noted that this distribution
will require the GCC front end files stored in the archive gccmain.zip.
If you do not have a copy of this, it can be retrieved from
  ftp://micros.hensa.ac.uk/micros/arch/riscos/b/b013/gccmain.zip
and relevant mirrors.

GNU C++ 2.7.2 also requires UnixLib 3.7a or later, but not UnixLib 4.0.
GNU C++ will not work with UnixLib 3.6e or earlier.


Compiling C++ source
--------------------

C++ source files can be kept in either the 'cc', 'c++' or 'cxx' directories.
Headers files are stored in the 'h' directory.

C++ comes with an extra file called g++. g++ is a front end binary for the
C++ compiler, and will automatically include the necessary run-time library
needed by C++ whenever the compilation needs it.

Typing:
    gcc -c cc.test
or  g++ -c cc.test

will compile the C++ file, test, into an AOF file and store it in the 'o'
directory.

Typing:
  gcc c.test -o test -lg++

is equivalent to:
  g++ c.test -o test

All GNU compilers require the library gcc:o.libgcc to operate. So separate
compile and link operations must include this.


Predefines
----------

In addition to the ones defined by the GCC front end, GNU C++ also
supplies '__GNUG__'.



Known problems
--------------

I certainly know of a few bugs and problems but I just couldn't be bothered
to document them. Well it's different to whatever anybody else says. If you
find a bug then please read the file docs.bugs for what to do if you have
found a bug.

Here is a list of all problems that I know of:

Statements of the form #include "dir.file.h" do not work correctly - Unixlib
does not convert this to dir.h.file. Use "dir/file.h" instead or "dir.h.file".


Known Restrictions
------------------

Non-local gotos are not implemented for functions within functions. This is
being worked on, when I have the time.

Exception handling is not supported. This is directly connected with
non-local gotos and will be fixed at the same time.

The template repository patch is not supported. A fix maybe provided in the
future.


Contacting me
-------------

Since I am at University and I generally don't like releasing my address to
the general public, I can only be contacted by e-mail:

During university term times: n.a.burrett@mcs.salford.ac.uk
Outside university term times: nickb@digibank.demon.co.uk

However, if there is no response from those addresses I can be contacted
through Simon Callan: gcc@callan.demon.co.uk.
