Section: 21 [meta] Status: C++11 Submitter: Daniel Krügler Opened: 2009-05-12 Last modified: 2016-01-28
Priority: Not Prioritized
View other active issues in [meta].
View all other issues in [meta].
View all issues with C++11 status.
Discussion:
The current wording in 21.3.2 [meta.rqmts] is still unclear concerning it's requirements on the type traits classes regarding ambiguities. Specifically it's unclear
true_type
/false_type
.
integral_constant
types making the contained names ambiguous
[ Batavia (2009-05): ]
Alisdair would prefer to factor some of the repeated text, but modulo a corner case or two, he believes the proposed wording is otherwise substantially correct.
Move to Open.
[ 2009-10 post-Santa Cruz: ]
Move to Tentatively Ready.
Proposed resolution:
[ The usage of the notion of a BaseCharacteristic below might be useful in other places - e.g. to define the base class relation in 22.10.6 [refwrap], 22.10.16 [func.memfn], or 22.10.17.3 [func.wrap.func]. In this case it's definition should probably be moved to Clause 17 ]
Change 21.3.2 [meta.rqmts] p.1 as indicated:
[..] It shall be
DefaultConstructible
,CopyConstructible
, and publicly and unambiguously derived, directly or indirectly, from its BaseCharacteristic, which is a specialization of the templateintegral_constant
(20.6.3), with the arguments to the templateintegral_constant
determined by the requirements for the particular property being described. The member names of the BaseCharacteristic shall be unhidden and unambiguously available in the UnaryTypeTrait.
Change 21.3.2 [meta.rqmts] p.2 as indicated:
[..] It shall be
DefaultConstructible
,CopyConstructible
, and publicly and unambiguously derived, directly or indirectly, froman instanceits BaseCharacteristic, which is a specialization of the templateintegral_constant
(20.6.3), with the arguments to the templateintegral_constant
determined by the requirements for the particular relationship being described. The member names of the BaseCharacteristic shall be unhidden and unambiguously available in the BinaryTypeTrait.
Change 21.3.5 [meta.unary] p.2 as indicated:
Each of these templates shall be a UnaryTypeTrait (20.6.1),
publicly derived directly or indirectly fromwhere its BaseCharacteristic shall betrue_type
if the corresponding condition is true, otherwise fromfalse_type
true_type
if the corresponding condition is true, otherwisefalse_type
.
Change 21.3.7 [meta.rel] p.2 as indicated:
Each of these templates shall be a BinaryTypeTrait (20.6.1),
publicly derived directly or indirectly fromwhere its BaseCharacteristic shall betrue_type
if the corresponding condition is true, otherwise fromfalse_type
true_type
if the corresponding condition is true, otherwisefalse_type
.