use is_distinct in unique_tuple
new holder
canAssignValueToHolder
is_copy_assignable with second argument
is_assignable
is_assignable.h
is_move_assignable