#include <memory>
#include <iostream>
using std::tr1::shared_ptr;
using std::cout;
struct S
{ // simple struct
void call_me(const char *desc) const
{ // member function
cout << "called me, " << desc << '\n';
}
};
int main()
{ // demonstrate use of controlled resource
shared_ptr<S> sp(new S);
sp->call_me("used operator->");
sp.get()->call_me("used member function get()");
(*sp).call_me("used operator*");
return 0;
}