struct C
{
  bool b;
  C(bool b) : b(b)
  {
  }
};

struct A
{
  C c1;

  A() : c1(false)
  {
  }
  const C *operator->() const
  {
    return &c1;
  }
};

struct B : A
{
  bool func() const
  {
    return (*this)->b;
  }
};

int main()
{
  const B b1;
  assert(b1.func() == false);
}
