Technical data

Cray Standard C/C++ Reference Manual
class A {
~A();
};
class B : public A {
~B();
};
B::~B(){} // Error except in cfront mode
When disambiguation requires deciding whether something is
a parameter declaration or an argument expression, the pattern
type-name-or-keyword(identifier ...) is treated as an argument. For example:
class A { A(); };
double d;
A x(int(d));
A(x2);
By default, int(d) is interpreted as a parameter declaration (with redundant
parentheses), and so x is a function; but in cfront compatibility mode int(d)
is an argument and x is a variable.
The declaration A(x2) is also misinterpreted by cfront. It should be
interpreted as the declaration of an object named x2, but in cfront mode it is
interpreted as a function style cast of x2 to the type A.
Similarly, the following declaration declares a function named xzy, that takes
a parameter of type function taking no arguments and returning an int.In
cfront mode, this is interpreted as a declaration of an object that is initialized
with the value int(), which evaluates to 0.
int xyz(int());
A named bit field can have a size of 0. The declaration is treated as though no
name had been declared.
Plain bit fields (such as bit fields declared with a type of int) are always
unsigned.
The name given in an elaborated type specifier can be a typedef name that is
the synonym for a class name. For example:
typedef class A T;
class T *pa; // No error in cfront mode
168 S217936