45  virtual std::unique_ptr<Base> 
clone()
 const override 
   47    static_assert(std::is_base_of<Base, Derived>::value,
 
   48        "template argument <Base> is not a base of " 
   49        "template argument <Derived>");
 
   50    static_assert(std::is_copy_constructible<Derived>::value,
 
   51        "template argument <Derived> is not copy constructible");
 
   54    return std::make_unique<Derived>(
static_cast<const Derived&
>(*
this));