*** Changes since G++ version 2.7.2:
-* A public review copy of the December 1996 Draft of the ANSI/ISO C++
- proto-standard is now available. See
+* A public review copy of the December 1996 Draft of the ISO/ANSI C++
+ standard is now available. See
http://www.cygnus.com/misc/wp/
+ Template friends.
* Exception handling support has been significantly improved and is on by
- default. This can result in significant runtime overhead. You can turn
- it off with -fno-exceptions.
+ default. The compiler supports two mechanisms for walking back up the
+ call stack; one relies on static information about how registers are
+ saved, and causes no runtime overhead for code that does not throw
+ exceptions. The other mechanism uses setjmp and longjmp equivalents, and
+ can result in quite a bit of runtime overhead. You can determine which
+ mechanism is the default for your target by compiling a testcase that
+ uses exceptions and doing an 'nm' on the object file; if it uses __throw,
+ it's using the first mechanism. If it uses __sjthrow, it's using the
+ second.
+
+ You can turn EH support off with -fno-exceptions.
* RTTI support has been rewritten to work properly and is now on by default.
This means code that uses virtual functions will have a modest space
* New flags:
- + New flags -Wsign-promo (warn about potentially confusing promotions
- in overload resolution), -Wno-pmf-conversion (don't warn about
- converting from a bound member function pointer to function pointer).
+ + New warning -Wno-pmf-conversion (don't warn about
+ converting from a bound member function pointer to function
+ pointer).
+ A flag -Weffc++ has been added for violations of some of the style
guidelines in Scott Meyers' _Effective C++_ books.
* The name of a class is now implicitly declared in its own scope; A::A
refers to A.
-* Local classes are now supported.
+* Local classes are now supported, though not inside templates.
* __attribute__ can now be attached to types as well as declarations.
return t;
}
- t = stabilize_reference (convert_from_reference (exp));
+ t = exp;
+ if (TREE_CODE (t) == OFFSET_REF)
+ t = resolve_offset_ref (t);
+ t = stabilize_reference (convert_from_reference (t));
type = TREE_TYPE (t);
code = TREE_CODE (type);
if (code == POINTER_TYPE)
{
#if 0
- /* As of Valley Forge, you can delete a pointer to constant. */
- /* You can't delete a pointer to constant. */
+ /* As of Valley Forge, you can delete a pointer to const. */
if (TREE_READONLY (TREE_TYPE (type)))
{
error ("`const *' cannot be deleted");
return error_mark_node;
}
#endif
- /* You also can't delete functions. */
+ /* You can't delete functions. */
if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
{
error ("cannot delete a function");