Go to the first, previous, next, last section, table of contents.
The current version of gcc/g++ is 2.7.2; the current libg++ is 2.7.1.
By the time you read this, two minor bug-fix releases, gcc 2.7.3
and libg++ 2.7.2, may be available. These new releases are mainly
intended to fix platform-specific bugs and do not affect the C++
"front end" of the compiler.
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.
If any features seem unfamiliar, you will probably want to
look at the recently-released public review copy of the C++ Working
Paper:
-
PostScript and PDF (Adobe Acrobat):
see `ftp://research.att.com/dist/c++std/WP'.
-
HTML and ASCII versions: see `ftp://ftp.cygnus.com/pub/g++'.
-
World Wide Web: see
`http://www.cygnus.com/misc/wp/'.
Here are the main points:
-
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
-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.
-
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.
-
Support for automatic template instantiation has 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 `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).
-
See section Problems and limitations with exceptions
-
Support for Run-Time Type Identification has been added with
-frtti
.
This support is still in alpha; one major restriction is that any file
compiled with -frtti
must include <typeinfo>
(not
typeinfo.h
as the NEWS file says).
Also, all code you link with (including libg++) has to be built with
-frtti
, so it's still tricky to use.
-
Synthesis of compiler-generated constructors, destructors and
assignment operators is now deferred until the functions are used.
-
The parsing of expressions such as
a ? b : c = 1
has changed from
(a ? b : c) = 1
to a ? b : (c = 1)
. This is a new C/C++
incompatibility brought to you by the ANSI/ISO standards committee.
-
The operator keywords and, and_eq, bitand, bitor, compl, not, not_eq,
or, or_eq, xor and xor_eq are now supported. Use
-ansi
or
-foperator-names
to enable them.
-
The
explicit
keyword is now supported. explicit
is used to mark
constructors and type conversion operators that should not be used
implicitly.
-
Handling of user-defined type conversion has been improved.
-
Explicit instantiation of template methods is now supported. Also,
inline template class foo<int>;
can be used to emit only the vtable
for a template class.
-
With -fcheck-new, g++ will check the return value of all calls to
operator new, and not attempt to modify a returned null pointer.
-
collect2 now demangles linker output, and c++filt has become part of
the gcc distribution.
-
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).
Go to the first, previous, next, last section, table of contents.