class Owner
{};



class Bla
{};


template<class T>
class object
{
public:
  void set_new(Bla *pobject, const Owner &l);


  const Owner * const powner;

  object() : powner(__null) {}

  void set(const Owner &owner, T *p) { check_owner(&owner); set_new(p, *powner); }

protected:

  void check_owner(const Owner *towner)
                  {
                    if (powner != towner)
                    {
                       const_cast<const Owner *&>(powner) = towner;
                    }
                  }

};



class X1 : public Bla
{
};

X1* ___GetX1()
{}


object<X1> BuildArray()
{

  object<X1> parray;
  parray.set(Owner(), ___GetX1());

}

object<X1> BuildArray2()
{

  object<X1> t;
  t.set(Owner(), ___GetX1());

  return t;
}
