add smart pointers
add function bind, rvalue update