invocation_trait
definition definition doesn't work for surrogate call functionsSection: 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 whichT1
is the possibly cv-qualified type oft1
andU1
denotesT1&
ift1
is an lvalue orT1&&
ift1
is an rvalue:
[…]
If
f
is a class object, the invocation parameters are the parameters matchingt1, ..., tN
of the best viable function (C++14 §13.3.3) for the argumentst1, ..., tN
among the function call operators and surrogate call functions off
.[…]