Listing 2: Adaptive veneer: emulating standard string
template <typename S> class c_str_veneer : public S , is_veneer<S, c_str_veneer<S> > { public: typedef S parent_class_type; typedef typename S::value_type value_type; // Other methods, including constructors ... value_type const *c_str() const; }; template <> inline LPCTSTR c_str_veneer<CString>::c_str() const { return *this; }