This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of TS status.
Section: 3.3.2 [fund.ts.v2::meta.trans.other] Status: TS Submitter: Mike Spertus Opened: 2015-09-25 Last modified: 2017-07-30
Priority: Not Prioritized
View all issues with TS status.
Discussion:
Addresses: fund.ts.v2
In Library Fundamentals 2 (N4529) 3.3.2p3 [meta.trans.other], the definition of invocation traits for a class object f considers when f is called via a function call operator that is matched by the arguments but ignores the possibility that f may be called via a surrogate call function (C++14 12.2.2.2.3 [over.call.object] p2), in which case, the definition of the invocation parameters may be either incorrect or even unsatisfiable.
[2015-10, Kona Saturday afternoon]
AM: Do we have this trait yet? JW: No, it cannot be implemented without compiler support.
Move to tentatively ready
Proposed resolution:
This wording is relative to N4529.
In Library Fundamentals 2, change [meta.trans.other] as indicated:
-3- Within this section, define the invocation parameters of INVOKE(f, t1, t2, ..., tN) as follows, in which T1 is the possibly cv-qualified type of t1 and U1 denotes T1& if t1 is an lvalue or T1&& if t1 is an rvalue:
[…]
If f is a class object, the invocation parameters are the parameters matching t1, ..., tN of the best viable function (C++14 §13.3.3) for the arguments t1, ..., tN among the function call operators and surrogate call functions of f.
[…]