This patch breaks DECL_OVERLOADED_OPERATOR_P apart into a predicate (as its name suggests) and DECL_OVERLOADED_OPERATOR_CODE, an accessor. I also add DECL_OVERLOADED_OPERATOR_IS, whose current implementation is a stepping stone to more a compressed operator enumeration. Also add assign_op_identifier and call_op_identifier, which we use reasonably commonly. I also notice that we're marking a lambda's conversion operator as an overloaded TYPE_EXPR. That's weird and unnecessary, so this marks it simply as a conversion operator. We're a little inconsistent in whether we check those two overloads by looking for identifier equivalence or examining the operator code enumeration. I've not addressed that. Applying to trunk. nathan -- Nathan Sidwell