// { dg-do assemble  }
// GROUPS passed visibility
// visibility file
// From: Sandeep Shroff <ss@caere.com>
// Date:     Thu, 05 Aug 1993 17:23:20 -0700
// Subject:  Access to private constructor.
// Message-ID: <9308060023.AA10283@neptune.caere.com>
#include <iostream>
#include <cstring>

class Base
{
public:
  char* getName() {return name_;}

private:
  Base();
  Base(char* str);

  char* name_;
};

class Derived : public Base
{
public:
  Derived(int n, char* str);
  Derived(int n);

  int getNum() {return num_;}
private:
  int num_;
};

Base::Base() // { dg-error "is private" }
{
  name_ = std::strcpy(new char[std::strlen(" ") + 1], " ");
}

Base::Base(char* str) // { dg-error "is private" }
{
  if(str != NULL)
    name_ = std::strcpy(new char[std::strlen(str) + 1], str);
}

Derived::Derived(int n, char* str) : Base(str) // { dg-error "within this context" }
{
  num_ = n;
}

Derived::Derived(int n) : Base() // { dg-error "within this context" }
{
  num_ = n;
}



int main()
{
  // Derived* d = new Derived(10, "test");
  Derived* d = new Derived(10);

  std::cerr << d->getNum() << "\t" << d->getName() << std::endl;
}



