#line 392 "/home/travis/build/felix-lang/felix/src/packages/pointers.fdoc"
  open class SharedPtr
  {
     type shared_ptr[T]
       = "::std::shared_ptr<?1>"
       requires Cxx_headers::memory
     ;
  
     ctor[T] shared_ptr[T] : 1 = "::std::shared_ptr<?1>()"; // nullptr
     ctor[T] shared_ptr[T] : &T = "::std::shared_ptr<?1>($1)";
  
     proc reset[T] : &shared_ptr[T] = "$1->reset();";
     proc swap[T] : &shared_ptr[T] * &shared_ptr[T] = "$1->swap(*$2);";
     fun get[T] : shared_ptr[T] -> &T = "$1.get()";
     fun deref[T] : shared_ptr[T] -> T = "*$1";
     fun use_count[T] : shared_ptr[T] -> long = "$1.use_count()";
     fun unique[T] : shared_ptr[T] -> bool = "$1.unique";
     fun is_null[T] : shared_ptr[T] -> bool = "(bool)$1";
  }