added unary_! operator