Section: 21 [meta] Status: C++17 Submitter: Tim Song Opened: 2016-01-07 Last modified: 2017-07-30
Priority: 0
View other active issues in [meta].
View all other issues in [meta].
View all issues with C++17 status.
Discussion:
16.4.5.8 [res.on.functions]/2.5 says that the behavior is undefined "if an incomplete type is used as a template argument when instantiating a template component, unless specifically allowed for that component."
This rule should not apply to type traits — a literal application would makeis_same<void, void>
undefined behavior, since nothing in 21 [meta] (or elsewhere) "specifically allows" instantiating is_same
with incomplete types.
Traits that require complete types are already explicitly specified as such, so the proposed wording below simply negates
16.4.5.8 [res.on.functions]/2.5 for 21 [meta].
[2016-02, Issues Telecon]
P0; move to Tentatively Ready.
Proposed resolution:
This wording is relative to N4567.
Insert a new paragraph after 21.3.3 [meta.type.synop]/1:
-?- Unless otherwise specified, an incomplete type may be used to instantiate a template in this subclause.