#include #include #include "main.h" template class Wrapper { std::shared_ptr impl; public: explicit Wrapper(std::shared_ptr ptr) : impl(std::move(ptr)) {} T* operator->() { return impl.get(); } const T* operator->() const { return impl.get(); } std::shared_ptr get() const { return impl; } operator std::shared_ptr() const { return impl; } operator const std::shared_ptr&() const { return impl; } operator std::shared_ptr&() { return impl; } void myHelper() const { std::cout << "[Wrapper] Helper method called\n"; } }; void draw_shape(const std::shared_ptr& shape) { shape->draw(); } int main() { auto circle = std::make_shared(10.0); Wrapper wrapped(circle); wrapped->draw(); std::cout << "Area: " << wrapped->area() << "\n"; wrapped.myHelper(); draw_shape(wrapped); std::shared_ptr copy = wrapped; draw_shape(copy); }