To answer the original question, operator G() has an implicit type of G.

To respond to cpjust, I agree the problem of unwanted implicit conversions can be a significant one, but disagree with that being a reason to avoid custom conversions altogether. With sensible design, it is possible to identify cases where implicit conversions are desirable (eg implicit conversions between very high precision floating point and very large integral types, should those be implemented class types).