implement unary operator