use variadic template fucntion for construct and construct_at