#ifndef A_H
#define A_H

#include <cstdio>
#include <memory>

class A {
public:
  A(int value) : m_a_value(value) {}
  A(int value, A *client_A) : m_a_value(value), m_client_A(client_A) {}

  virtual ~A() {}

  virtual void doSomething(A &anotherA);

  int Value() { return m_a_value; }

private:
  int m_a_value;
  std::auto_ptr<A> m_client_A;
};

A *make_anonymous_B();

A *take_A(A *a);

#endif
