#ifndef _POWELLCS440 #include #include #define todo(msg) \ std::cerr << msg << std::endl; \ assert(false); namespace cs440 { template class SharedPtr { public: SharedPtr() { todo("incomplete") } template explicit SharedPtr(U *){todo("incomplete")} SharedPtr(const SharedPtr &p) { todo("incomplete") } template SharedPtr(const SharedPtr &p){ todo("incomplete")} SharedPtr(SharedPtr &&p) { todo("asdf") } template SharedPtr(SharedPtr &&p){todo("asdf")} SharedPtr & operator=(const SharedPtr &) { todo("") } template SharedPtr &operator=(const SharedPtr &){ todo("")} SharedPtr &operator=(SharedPtr &&p) { todo("") } template SharedPtr &operator=(SharedPtr &&p) { todo("") } ~SharedPtr() { todo("") } void reset() { todo("") } template void reset(U *p){todo("")} T *get() const {todo("")} T &operator*() const { todo("")} T *operator-> () const { todo("") } explicit operator bool() const { todo("") } }; template bool operator==(const SharedPtr &, const SharedPtr &) { todo("") } template bool operator==(const SharedPtr &, std::nullptr_t) { todo("") } template bool operator==(std::nullptr_t, const SharedPtr &) { todo("") } template bool operator!=(const SharedPtr &, const SharedPtr &) { todo("") } template bool operator!=(const SharedPtr &, std::nullptr_t) { todo("") } template bool operator!=(std::nullptr_t, const SharedPtr &) { todo("") } template SharedPtr static_pointer_cast(const SharedPtr &sp) { todo("") } template SharedPtr dynamic_pointer_cast(const SharedPtr &sp) { todo("") } } // namespace cs440 #endif