18#ifndef GZ_PHYSICS_CLONEABLE_HH_ 
   19#define GZ_PHYSICS_CLONEABLE_HH_ 
   33      public: Cloneable() = 
default;
 
   36      public: 
virtual ~Cloneable() = 
default;
 
   40      public: Cloneable(
const Cloneable &_doNotCopy) = 
delete;
 
   44      public: Cloneable& operator=(
const Cloneable &_doNotCopy) = 
delete;
 
   56      public: 
virtual void Copy(
const Cloneable &_other) = 0;
 
   62      public: 
virtual void Copy(Cloneable &&_other) = 0;
 
   75    class MakeCloneable final : 
public T, 
public Cloneable
 
   80      public: 
template <
typename... Args>
 
   83      MakeCloneable(Args&&... _args); 
 
   88      public: MakeCloneable(
const MakeCloneable &_other);
 
   94      public: MakeCloneable(MakeCloneable &&_other);
 
  100      public: MakeCloneable &operator=(
const MakeCloneable &_other);
 
  107      public: MakeCloneable& operator=(MakeCloneable &&_other);
 
  113      public: 
void Copy(const Cloneable &_other) final;
 
  116      public: 
void Copy(Cloneable &&_other) final;
 
  121#include "gz/physics/detail/Cloneable.hh"