Range_operator and range_operator_float are 2 different classes, which was not the original intent. This makes generalized dispatch to the appropriate function more difficult.  The distinction between what is a float operator and what is an integral operator also blurs when some methods have multiple types.  ie, casts : INT = FLOAT and FLOAT = INT, or other mixed operations like INT = FLOAT < FLOAT This patch unifies all possible invocation patterns in one range_operator class. All the float operators now inherit from range_operator, and this allows the float table to use the general range_op_table class instead of re-implementing another kind of table.  THis paves the way for the next patch which provides generalized dispatch for the various routines from a VRANGE. There is little functional difference after this patch. Bootstraps on x86_64-pc-linux-gnu with no regressions.  Pushed. Andrew