overload lab
add copy and swap