Proposed resolution (February, 2020):
Change 13.7.7.3 [temp.func.order] paragraph 3 as follows:
To produce the transformed template, for each type, non-type, or template template parameter (including template parameter packs (13.7.4 [temp.variadic]) thereof) synthesize a unique type, value, or class template respectively and substitute it for each occurrence of that parameter in the function type of the template. [Note: The type replacing the placeholder in the type of the value synthesized for a non-type template parameter is also a unique synthesized type. —end note]
If only one of theEach functiontemplatestemplate M that is a member function, and that function is a non-static member of some class A, Mis considered to have a new first parameter of type X(M), described below, inserted in its function parameter list.Given cv as theIf exactly one of the function templates was considered by overload resolution via a rewritten candidate (12.2.2.3 [over.match.oper]) with a reversed order of parameters, then the order of the function parameters in its transformed template is reversed. For a function template M with cv-qualifiersof M (if any), the new parametercv that is a member of a class A:
The type X(M) is
of type“rvalue reference to cv A” if the optional ref-qualifier of M is && or if M has no ref-qualifier and thefirstpositionally corresponding parameter of the other transformed template has rvalue reference type; if this determination depends recursively upon whether X(M) is an rvalue reference type, it is not considered to have rvalue reference type.Otherwise,
the new parameterX(M) isof type“lvalue reference to cv A”.[Note: This allows...