
On Apr 26, 2005, at 11:37 AM, Peter Dimov wrote:
ConstPropagation policy (with the default being No for shallow copy and Yes for deep copy).
I've been toying with a smart pointer adaptor for this one. I really haven't fully fleshed out the thinking on it though... template <class SP> class deep_const { public: typedef SP pointer; private: pointer sp_; typedef decltype(*pointer()) reference; public: deep_const() {} deep_const(const pointer& p) : sp_(p) {} deep_const(pointer&& p) : sp_(std::move(p)) {} deep_const(const deep_const& p) : sp_(p.sp_) {} deep_const(deep_const&& p) : sp_(std::move(p.sp_)) {} deep_const& operator=(const deep_const& p) {sp_ = p.sp_; return *this;} deep_const& operator=(deep_const&& p) {sp_ = std::move(p.sp_); return *this;} reference operator*() {return *sp_;} const reference operator*() const {return *sp_;} //... }; deep_const<shared_ptr<std::string> > sp; -Howard