Proposed resolution (January, 2019):
Change 6.3 [basic.def.odr] paragraph 2 as follows:
An expression or conversion is potentially evaluated unless it is an unevaluated operand (7.2 [expr.prop]),ora subexpression thereof, or a conversion in an initialization or conversion sequence in such a context. The set of potential results of an expression e is defined as follows:...
Cbange 6.3 [basic.def.odr] paragraph 3 as follows:
A function is named by
an expressionan expression or conversion as follows:
A function
whose name appears in an expressionis named bythatan expression or conversion if it is the uniquelookupresult of a name lookup or the selected member of a set of overloaded functions (6.5 [basic.lookup], 12.2 [over.match], 12.3 [over.over]) in an overload resolution performed as part of forming that expression or conversion, unless it is a pure virtual function and eitherits name is notthe expression is not an id-expression naming the function with anexplicitly qualified name or the expression forms a pointer to member (7.6.2.2 [expr.unary.op]). [Note: This covers taking the address of functions (7.3.4 [conv.func], 7.6.2.2 [expr.unary.op]), calls to named functions (7.6.1.3 [expr.call]), operator overloading (Clause 12 [over]), user-defined conversions (11.4.8.3 [class.conv.fct]), allocation functions forplacementnew-expressions (7.6.2.8 [expr.new]), as well as non-default initialization (9.5 [dcl.init]). A constructor selected to copy or move an object of class type is considered to be named by an expression or conversion even if the call is actually elided by the implementation (11.9.6 [class.copy.elision]). —end note]A
n allocation ordeallocation function for a class is named by a new-expression if it is the single matching deallocation function for the allocation function selected by o verload resolution, as specified in 7.6.2.8 [expr.new]and 11.4.11 [class.free].A deallocation function for a class is named by a
delete expressiondelete-expression if it is the selected usual deallocation function as specified in 7.6.2.9 [expr.delete] and 11.4.11 [class.free].
Change 6.3 [basic.def.odr] paragraph 7 as follows:
A virtual member function is odr-used if it is not pure. A function is odr-used if it is named by a potentially-evaluated expression or conversion. A non-placement...