This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 117b. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2025-08-11
2725. Overload resolution for non-call of class member accessSection: 7.6.1.5 [expr.ref] Status: DRWP Submitter: Richard Smith Date: 2023-04-26[Accepted as a DR at the November, 2023 meeting.]
Consider:
struct A { static void f(); static void f(int); } x; void (*p)() = x.f; // error
This is ill-formed as confirmed by issue 61. Various other changes (see issue 2241) have put the following example into the same category:
struct B { static void f(); } y; void (*q)() = y.f; // error
If this is the intended outcome (although major implementations disagree), then the rules in 7.6.1.5 [expr.ref] should be clarified accordingly.
Proposed resolution (approved by CWG 2023-06-13):
Change in 7.6.1.5 [expr.ref] bullet 6.3 as follows:
- ...
- If E2 is an overload set, the expression shall be the (possibly-parenthesized) left-hand operand of a member function call (7.6.1.3 [expr.call]), and function overload resolution (12.2 [over.match]) is used to select the function to which E2 refers. The type of E1.E2 is the type of E2 and E1.E2 refers to the function referred to by E2.
- If E2 refers to a static member function, E1.E2 is an lvalue.
- Otherwise (when E2 refers to a non-static member function), E1.E2 is a prvalue. The expression can be used only as the left-hand operand of a member function call (11.4.2 [class.mfct]). [Note 5: Any redundant set of parentheses surrounding the expression is ignored (7.5.4 [expr.prim.paren]). —end note]
- ...
This also addresses issue 1038.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4