// { dg-do assemble  }
// g++ 1.37.1 bug 900428_03

// g++ fails to detect cases where a constructor for a derived class invokes
// (either explicitly or implicitly) a private constructor for a base class.

// cfront 2.0 passes this test.

// keywords: inheritance, private, accessability, constructors

struct struct_0 {
  int struct_0_data_member;

private:
  struct_0 (int, int);
public:
  struct_0 (int);
};

struct_0::struct_0 (int i) { }
struct_0::struct_0 (int, int) { } // { dg-error "is private" }

struct struct_1 : public struct_0 {

  struct_1 ();
};

struct_1::struct_1 () : struct_0 (8,9) // { dg-error "within this context" }
{
}

struct struct_2 {
  struct_0 struct_2_data_member;

  struct_2 ();
};

struct_2::struct_2 () : struct_2_data_member (8,9) // { dg-error "within this context" }
{
}

int main () { return 0; }
