// { dg-do assemble  }
// { dg-options "-pedantic-errors" }
// GROUPS passed constructors
// ctors file
// Message-Id: <9301132030.AA05210@cs.rice.edu>
// From: dougm@cs.rice.edu (Doug Moore)
// Subject: 2.3.3: accepts ctor-less derived class of ctor-ful base class
// Date: Wed, 13 Jan 93 14:30:21 CST
// Note: It gives an error now.  But not a very good one.

struct Foo
{
  Foo(int aa);
  int a;
  const Foo* operator-> () const {return this;}
};

Foo::Foo(int aa)
:a(aa)
{ }


struct var_Foo: public Foo
{ // { dg-error "" }  base.*// ERROR -  in class.*
  var_Foo* operator-> () {return this;}
};

int blort(Foo& f)
{
  return f->a;
}

int main()
{
  var_Foo b(2);// { dg-error "" } 
  b->a = 0;
  int x = blort(b);
  return x;
}
