Description
[basic.def.odr]/4.1 is currently relatively hard to parse due to the double-negation "unless [....] is not":
A function is named by an expression or conversion if it is the selected member of an overload set ([basic.lookup], [over.match], [over.over]) in an overload resolution performed as part of forming that expression or conversion, unless it is a pure virtual function and either the expression is not an id-expression naming the function with an explicitly qualified name or the expression forms a pointer to member ([expr.unary.op]).
Perhaps it could be rephrased to avoid this:
A function is named by an expression or conversion if it is the selected member of an overload set ([basic.lookup], [over.match], [over.over]) in an overload resolution performed as part of forming that expression or conversion, and either
unlessit is not a pure virtual function orand eitherthe expression isnotan id-expression naming the function with an explicitly qualified nameorthat does not formthe expression formsa pointer to member ([expr.unary.op]).