lvalue & rvalue, reference, move, move constructor