// { dg-do assemble }
|
// { dg-do assemble }
|
// GROUPS passed nested-classes
|
// GROUPS passed nested-classes
|
// This is the first line of file ||t3.C||.
|
// This is the first line of file ||t3.C||.
|
|
|
// This code demonstrates a variation of the same problem with nested
|
// This code demonstrates a variation of the same problem with nested
|
// types. In C++, nested typedefs are not supposed to be visible
|
// types. In C++, nested typedefs are not supposed to be visible
|
// outside their class scopes but they apparently are in gcc 2.4.5.
|
// outside their class scopes but they apparently are in gcc 2.4.5.
|
// This code compiles fine in AT&T cfront 3.0.1, but gcc rejects it
|
// This code compiles fine in AT&T cfront 3.0.1, but gcc rejects it
|
// with the messages given below.
|
// with the messages given below.
|
|
|
// If this class does not precede Expr, then the code will compile.
|
// If this class does not precede Expr, then the code will compile.
|
|
|
class Another {
|
class Another {
|
public:
|
public:
|
typedef int Boolean;
|
typedef int Boolean;
|
enum { FALSE, TRUE };
|
enum { FALSE, TRUE };
|
};
|
};
|
|
|
// If Expr does not define typedef int Boolean, then the code will
|
// If Expr does not define typedef int Boolean, then the code will
|
// compile.
|
// compile.
|
|
|
class Expr {
|
class Expr {
|
public:
|
public:
|
typedef int Boolean;
|
typedef int Boolean;
|
enum { FALSE, TRUE };
|
enum { FALSE, TRUE };
|
void foo();
|
void foo();
|
void call_something_with(Boolean);
|
void call_something_with(Boolean);
|
};
|
};
|
|
|
// t3.C: In method `void Expr::foo ()':
|
// t3.C: In method `void Expr::foo ()':
|
// t3.C:36: uninitialized const `Boolean'
|
// t3.C:36: uninitialized const `Boolean'
|
// t3.C:36: parse error before `='
|
// t3.C:36: parse error before `='
|
// t3.C:37: `argument' undeclared (first use this function)
|
// t3.C:37: `argument' undeclared (first use this function)
|
// t3.C:37: (Each undeclared identifier is reported only once
|
// t3.C:37: (Each undeclared identifier is reported only once
|
// t3.C:37: for each function it appears in.)
|
// t3.C:37: for each function it appears in.)
|
|
|
void Expr::foo() {
|
void Expr::foo() {
|
const Boolean argument = TRUE;
|
const Boolean argument = TRUE;
|
call_something_with(argument);
|
call_something_with(argument);
|
}
|
}
|
|
|