int main()
{
  {
    SafePerson p;
    p.SetName("Vicente");
  }
  {
    Person_ts p;
    p->SetName("Vicente");
  }
  {
    SafeMemberPerson p(1);
    p.SetName("Vicente");
  }
  {
    Person2_ts p(1);
    p->SetName("Vicente");
  }
  {
    HelperPerson p(1);
    p.SetName("Vicente");
  }
  {
    Person3_ts p(1);
    p->SetName("Vicente");
  }
  {
    Person3_ts p1(1);
    Person3_ts p2(2);
    Person3_ts p3(3);
#if ! defined BOOST_NO_CXX11_AUTO_DECLARATIONS
    auto  lk1 = p1.unique_synchronize(boost::defer_lock);
    auto  lk2 = p2.unique_synchronize(boost::defer_lock);
    auto  lk3 = p3.unique_synchronize(boost::defer_lock);
#else
    boost::unique_lock_ptr<Person3>  lk1 = p1.unique_synchronize(boost::defer_lock);
    boost::unique_lock_ptr<Person3>  lk2 = p2.unique_synchronize(boost::defer_lock);
    boost::unique_lock_ptr<Person3>  lk3 = p3.unique_synchronize(boost::defer_lock);
#endif
    boost::lock(lk1,lk2,lk3);

    lk1->SetName("Carmen");
    lk2->SetName("Javier");
    lk3->SetName("Matias");
  }
  return 0;
}
int main()
{
  {
    SafePerson p;
    p.SetName("Vicente");
  }
  {
    Person_ts p;
    p->SetName("Vicente");
  }
  {
    SafeMemberPerson p(1);
    p.SetName("Vicente");
  }
  {
    Person2_ts p(1);
    p->SetName("Vicente");
  }
  {
    HelperPerson p(1);
    p.SetName("Vicente");
  }
  {
    Person3_ts p(1);
    p->SetName("Vicente");
  }
  {
    Person3_ts p1(1);
    Person3_ts p2(2);
    Person3_ts p3(3);
#if ! defined BOOST_NO_CXX11_AUTO_DECLARATIONS
    auto  lk1 = p1.unique_synchronize(boost::defer_lock);
    auto  lk2 = p2.unique_synchronize(boost::defer_lock);
    auto  lk3 = p3.unique_synchronize(boost::defer_lock);
#else
    boost::unique_lock_ptr<Person3>  lk1 = p1.unique_synchronize(boost::defer_lock);
    boost::unique_lock_ptr<Person3>  lk2 = p2.unique_synchronize(boost::defer_lock);
    boost::unique_lock_ptr<Person3>  lk3 = p3.unique_synchronize(boost::defer_lock);
#endif
    boost::lock(lk1,lk2,lk3);

    lk1->SetName("Carmen");
    lk2->SetName("Javier");
    lk3->SetName("Matias");
  }
#if ! defined BOOST_NO_CXX11_AUTO_DECLARATIONS \
&& ! defined(BOOST_THREAD_NO_SYNCHRONIZE)
  {
    Person3_ts p1(1);
    Person3_ts p2(2);
    Person3_ts p3(3);

    auto t  = boost::synchronize(p1,p2,p3);
    std::get<0>(t)->SetName("Carmen");
    std::get<1>(t)->SetName("Javier");
    std::get<2>(t)->SetName("Matias");
  }
  {
    const Person3_ts p1(1);
    Person3_ts p2(2);
    const Person3_ts p3(3);

    auto t  = boost::synchronize(p1,p2,p3);
    //std::get<0>(t)->SetName("Carmen");
    std::get<1>(t)->SetName("Javier");
    //std::get<2>(t)->SetName("Matias");
  }
#endif
  return 0;
}