#ifndef ARG_DEEP_COPY_UTILS_H #define ARG_DEEP_COPY_UTILS_H #ifndef ARG_COMPILER_H #include "arg_compiler.h" #endif namespace arg { struct cloneable {}; struct Cloneable {}; template<class p_type> inline p_type* deep_copy(const p_type* p, const void*) { return p ? new p_type(*p) : 0; } template<class p_type> inline p_type* deep_copy(const p_type *p, const cloneable *) { return p ? p->clone() : 0; } template<class p_type> inline p_type* deep_copy(const p_type *p, const Cloneable *) { return p ? p->makeClone() : 0; } template<class p_type> inline p_type* deep_copy(const p_type* p) { return deep_copy(p, p); } } #endif