Commit bfeec33d by Nathan Sidwell

Remove 3.4 change list, point to gcc-3.4/changes.html

From-SVN: r70506
parent e895113a
*** Changes in GCC 3.4: *** Changes in GCC 3.4:
* The C++ parser in G++ has been rewritten from scratch. As a result, G++ * Changes in GCC 3.4 are described in 'gcc-3.4/changes.html'
is considerably more compliant to the C++ standard. As a result, it
accepts more valid programs, and rejects more invalid programs.
Many of the changes below are a consequence of the new parser.
* Friend declarations that refer to template specializations are rejected
if the template has not already been declared.
For example:
template <typename T>
class C {
friend void f<>(C&);
};
is rejected; you must first declare `f' as a template:
template <typename T>
void f(T);
* You must use "template <>" to introduce template specializations, as
required by the standard. For example:
template <typename T>
struct S;
struct S<int> { };
is rejected; you must write:
template <> struct S<int> {};
* You must now use the `typename' and `template' keywords to disambiguate
dependent names, as required by the C++ standard.
* The "named return value" extension has been removed.
* The "implicit typename" extension has been removed.
* Default arguments in function types have been deprecated and will be
removed.
* G++ used to accept code like this:
struct S {
int h();
void f(int i = g());
int g(int i = h());
};
This behavior is not mandated by the standard.
Now G++ issues an error about this code. To avoid the error, you must
move the declaration of `g' before the declaration of `f'. The
default arguments for `g' must be visible at the point where it is
called.
* When -pedantic is used, G++ now issues errors about spurious semicolons;
for example:
namespace N {}; // Invalid semicolon.
void f() {}; // Invalid semicolon.
* G++ no longer accepts attributes for a declarator after the
initializer associated with that declarator. For example:
X x(1) __attribute__((...));
is no longer accepted. Instead, use:
X x __attribute__((...)) (1);
* Covariant returns are implemented for all but varadic functions that
require an adjustment.
* Inside the scope of a template class, the name of the class itself
is no longer a valid template template argument. Instead, you now have
to qualify the name by its scope. For example:
template <template <class> class TT> class X {};
template <class T> class Y {
X<Y> x; // Invalid.
};
The valid code for the above example is:
X< ::Y> x; // Valid. Note that `<:' is a digraph and means `['.
*** Changes in GCC 3.3: *** Changes in GCC 3.3:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment