Proposed resolution (August, 2011):
Change 12.2.2.7 [over.match.ref] paragraph 1 as follows:
The conversion functions of S and its base classes
are considered, except that for copy-initialization, only the
non-explicit conversion functions are considered. Those that are not
hidden within S and yield type “lvalue reference to
cv2 T2” (when 9.5.4 [dcl.init.ref]
requires an lvalue result initializing an lvalue reference
or an rvalue reference to function) or “cv2
T2” or “rvalue reference to cv2
T2” (when 9.5.4 [dcl.init.ref] requires an
rvalue result initializing an rvalue reference or an lvalue
reference to function), where “cv1
T” is reference-compatible (9.5.4 [dcl.init.ref])
with “cv2 T2”, are candidate
functions.
Change 12.2.4 [over.match.best] paragraph 1 as follows:
...
the context is an initialization by user-defined conversion... or if not that,
the context is an initialization by conversion function for direct reference binding (12.2.2.7 [over.match.ref]) of a reference to function type, the return type of F1 is the same kind of reference (i.e. lvalue or rvalue) as the reference being initialized, and the return type of F2 is not [Example:
template <class T> struct A { operator T&(); // #1 operator T&&(); // #2 }; typedef int Fn(); A<Fn> a; Fn& lf = a; // calls #1 Fn&& rf = a; // calls #2
—end example] or, if not that,
F1 is a non-template function...