Created on 2015-12-10.00:00:00 last changed 89 months ago
Proposed resolution:
This wording is relative to N4600.
In [meta.logical] p3, edit as follows:
template<class... B> struct conjunction : see below { };-2- The class template
-3- Theconjunction
forms the logical conjunction of its template type arguments. Every template type argument shall be usable as a base class and shall have a static data membervalue
which is convertible tobool
, is not hidden, and is unambiguously available in the type.BaseCharacteristic of aspecialization conjunction<B1, …, BN> has a public and unambiguous base that is either
- — the first type Bi in the list true_type, B1, ..., BN for which bool(Bi::value) is false, or
- — if there is no such Bi, the last type in the list.
-?- The member names of the base class, other than conjunction and operator=, shall not be hidden and shall be unambiguously available in conjunction.
is the first type[Note: This means a specialization of conjunction does not necessarilyB
in the listtrue_type, B1, …, BN
for whichB::value == false
, or ifevery B::value != false
the BaseCharacteristic is the last type in the list.have a BaseCharacteristic ofinherit from eithertrue_type
orfalse_type
. — end note]
In [meta.logical] p6, edit as follows:
template<class... B> struct disjunction : see below { };-5- The class template
-6- Thedisjunction
forms the logical disjunction of its template type arguments. Every template type argument shall be usable as a base class and shall have a static data membervalue
which is convertible tobool
, is not hidden, and is unambiguously available in the type.BaseCharacteristic of aspecialization disjunction<B1, …, BN> has a public and unambiguous base that is either
- — the first type Bi in the list false_type, B1, ..., BN for which bool(Bi::value) is true, or,
- — if there is no such Bi, the last type in the list.
-?- The member names of the base class, other than disjunction and operator=, shall not be hidden and shall be unambiguously available in disjunction.
is the first type[Note: This means a specialization of disjunction does not necessarilyB
in the listfalse_type, B1, …, BN
for whichB::value != false
, or ifevery B::value == false
the BaseCharacteristic is the last type in the list.have a BaseCharacteristic ofinherit from eithertrue_type
orfalse_type
. — end note]
In [meta.logical] p8, edit as follows:
template<class B> struct negation :integral_constant<bool, !B::value>see below { };-8- The class template
negation
forms the logical negation of its template type argument. The typenegation<B>
is a UnaryTypeTrait with a BaseCharacteristic ofintegral_constant<bool, !bool(B::value)>
.
[ 2016-11-08, Issaquah ]
Adopted during NB comment resolution
[ 2016-08-07 Daniel provides wording borrowed from 2567 ]
Addresses: fund.ts.v2
The specification of conjunction and disjunction uses the term BaseCharacteristic, which is problematic in several ways:
That term is defined in [meta.rqmts], but only for UnaryTypeTraits and BinaryTypeTraits. conjunction and disjunction seem to be neither.
[meta.rqmts] also requires the BaseCharacteristic for both UnaryTypeTraits and BinaryTypeTraits to be a specialization of integral_constant, which is inconsistent with the current design of conjunction and disjunction.
The requirement in [meta.rqmts] that "member names of the BaseCharacteristic shall not be hidden and shall be unambiguously available" seems impossible to meet in every case, since the arbitrary base class from which a specialization of conjunction or disjunction derives may contain members called conjunction or disjunction that will necessarily be hidden.
History | |||
---|---|---|---|
Date | User | Action | Args |
2017-07-30 20:10:41 | admin | set | status: wp -> open |
2016-11-20 18:55:07 | admin | set | messages: + msg8650 |
2016-11-20 18:55:07 | admin | set | status: open -> wp |
2016-08-07 11:17:37 | admin | set | messages: + msg8459 |
2016-08-07 11:17:37 | admin | set | messages: + msg8458 |
2016-08-07 11:17:37 | admin | set | status: new -> open |
2016-08-02 12:53:51 | admin | set | messages: + msg8300 |
2015-12-10 00:00:00 | admin | create |