greatly simplify the implementation of proto's operator overloads