template <int N>
struct CopyHelper {
void copy (char *dst, char const *src)
{
*dst = *src;
CopyHelper<(N - 1)>::copy(dst + 1, src + 1);
}
};
template <>
struct CopyHelper<0> {
void copy (char *dst, char const *src)
{
}
};
template <int N>
void copy (void *dst, void const *src)
{
return CopyHelper<N>::copy((char *)dst, (char const *)src);
}
dGVtcGxhdGUgPGludCBOPgpzdHJ1Y3QgQ29weUhlbHBlciB7CiAgICB2b2lkIGNvcHkgKGNoYXIgKmRzdCwgY2hhciBjb25zdCAqc3JjKQogICAgewogICAgICAgICpkc3QgPSAqc3JjOwogICAgICAgIENvcHlIZWxwZXI8KE4gLSAxKT46OmNvcHkoZHN0ICsgMSwgc3JjICsgMSk7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgQ29weUhlbHBlcjwwPiB7CiAgICB2b2lkIGNvcHkgKGNoYXIgKmRzdCwgY2hhciBjb25zdCAqc3JjKQogICAgewogICAgfQp9OwoKdGVtcGxhdGUgPGludCBOPgp2b2lkIGNvcHkgKHZvaWQgKmRzdCwgdm9pZCBjb25zdCAqc3JjKQp7CiAgICByZXR1cm4gQ29weUhlbHBlcjxOPjo6Y29weSgoY2hhciAqKWRzdCwgKGNoYXIgY29uc3QgKilzcmMpOwp9Cg==