Go forward to Encoding.
Go backward to Templates.
Go up to Top.

GNU C++ Conformance to ANSI C++
*******************************

   These changes in the GNU C++ compiler were made to comply more
closely with the ANSI base document, `The Annotated C++ Reference
Manual' (the ARM).  Further reducing the divergences from ANSI C++ is a
continued goal of the GNU C++ Renovation Project.

   Section 3.4, Start and Termination.  It is now invalid to take the
address of the function `main()'.

   Section 4.8, Pointers to Members.  The compiler produces an error
for trying to convert between a pointer to a member and the type `void
*'.

   Section 5.2.5, Increment and Decrement.  It is an error to use the
increment and decrement operators on an enumerated type.

   Section 5.3.2, Sizeof.  Doing `sizeof' on a function is now an error.

   Section 5.3.4, Delete.  The syntax of a cast-expression is now more
strictly controlled.

   Section 7.1.1, Storage Class Specifiers.  Using the `static' and
`extern' specifiers can now only be applied to names of objects,
functions, and anonymous unions.

   Section 7.1.1, Storage Class Specifiers.  The compiler no longer
complains about taking the address of a variable which has been
declared to have `register' storage.

   Section 7.1.2, Function Specifiers.  The compiler produces an error
when the `inline' or `virtual' specifiers are used on anything other
than a function.

   Section 8.3, Function Definitions.  It is now an error to shadow a
parameter name with a local variable; in the past, the compiler only
gave a warning in such a situation.

   Section 8.4.1, Aggregates.  The rules concerning declaration of an
aggregate are now all checked in the GNU C++ compiler; they include
having no private or protected members and no base classes.

   Section 8.4.3, References.  Declaring an array of references is now
forbidden.  Initializing a reference with an initializer list is also
considered an error.

   Section 9.5, Unions.  Global anonymous unions must be declared
`static'.

   Section 11.4, Friends.  Declaring a member to be a friend of a type
that has not yet been defined is an error.

   Section 12.1, Constructors.  The compiler generates a default copy
constructor for a class if no constructor has been declared.

   Section 12.6.2, Special Member Functions.  When using a
mem-initializer list, the compiler will now initialize class members in
declaration order, not in the order in which you specify them.  Also,
the compiler enforces the rule that non-static `const' and reference
members must be initialized with a mem-initializer list when their
class does not have a constructor.

   Section 12.8, Copying Class Objects.  The compiler generates default
copy constructors correctly, and supplies default assignment operators
compatible with user-defined ones.

   Section 13.4, Overloaded Operators.  An overloaded operator may no
longer have default arguments.

   Section 13.4.4, Function Call.  An overloaded `operator ()' must be
a non-static member function.

   Section 13.4.5, Subscripting.  An overloaded `operator []' must be a
non-static member function.

   Section 13.4.6, Class Member Access.  An overloaded `operator ->'
must be a non-static member function.

   Section 13.4.7, Increment and Decrement.  The compiler will now make
sure a postfix `operator ++' or `operator --' has an `int' as its
second argument.