made equals templates, and added disallow copy and assign marco