// Clonable and nested Base, including their inline members: class Clonable { public: class Base; private: Base *d_bp; public: class Base { public: virtual ~Base(); Base *clone() const; private: virtual Base *newCopy() const = 0; }; Clonable(); explicit Clonable(Base *base); ~Clonable(); Clonable(Clonable const &other); Clonable(Clonable &&tmp); Clonable &operator=(Clonable const &other); Clonable &operator=(Clonable &&tmp); Base &base() const; }; inline Clonable::Base *Clonable::Base::clone() const { return newCopy(); } inline Clonable::Base &Clonable::base() const { return *d_bp; } // Derived and its inline member: class Derived1: public Clonable::Base { public: ~Derived1(); private: virtual Clonable::Base *newCopy() const; }; inline Clonable::Base *Derived1::newCopy() const { return new Derived1(*this); } // Members not implemented inline: Clonable::Base::~Base() {}