#include #include #include using namespace std; template void localcopy( T* lhs, T* lhs_end, T* rhs) { register T *plhs=lhs, *prhs=rhs, *plhs_end = lhs_end; while (plhs != plhs_end) { *plhs++ = *prhs++; } } const int iter_count = 100; const size_t N = 5000; template void time_copy( T dummy) { T* lhs = new T[N]; T* rhs = new T[N]; boost::timer t; double result; int i; dummy = 0; cout << "profiling copy for type " << typeid( T).name() << endl; t.restart(); for (i=0;i //OutputIterator copy(InputIterator first, InputIterator last, // OutputIterator result); namespace std { template <> FooClass * copy( const FooClass *lhs, const FooClass *lhs_end, FooClass *rhs) { size_t sz = (lhs_end - lhs)*sizeof(FooClass); memcpy( rhs, lhs, sz); return rhs+(lhs_end-lhs); } } template <> void localcopy( FooClass *lhs, FooClass *lhs_end, FooClass *rhs) { size_t sz = (lhs_end - lhs)*sizeof(FooClass); memcpy( rhs, lhs, sz); } int main() { char c; int i; long long j; double d; long double D; time_copy( c); time_copy( i); time_copy( j); time_copy( d); time_copy( D); time_copy( Foo); return 0; }