std::experimental:: disjunction
|
Défini dans l'en-tête
<experimental/type_traits>
|
||
|
template
<
class
...
B
>
struct disjunction ; |
(bibliothèque fundamentals TS v2) | |
Forme la
disjonction logique
des traits de type
B...
, effectuant effectivement un ou logique sur la séquence de traits.
La spécialisation std :: experimental :: disjunction < B1, ..., BN > possède une base publique et non ambiguë qui est
- si sizeof... ( B ) == 0 , std:: false_type ; sinon
-
le premier type
BidansB1, ..., BNpour lequel bool ( Bi :: value ) == true , ouBNs'il n'existe pas un tel type.
Les noms des membres de la classe de base, à l'exception de
disjunction
et
operator=
, ne sont pas masqués et sont disponibles sans ambiguïté dans
disjunction
.
La disjonction est à court-circuit : s'il existe un argument de type template
Bi
avec
bool
(
Bi
::
value
)
!
=
false
, alors l'instanciation de
disjunction
<
B1, ..., BN
>
::
value
ne nécessite pas l'instanciation de
Bj
::
value
pour
j > i
.
Table des matières |
Paramètres du modèle
| B... | - |
chaque argument de template
Bi
pour lequel
Bi
::
value
est instancié doit être utilisable comme classe de base et définir le membre
value
convertible en
bool
|
Modèle de variable d'assistance
|
template
<
class
...
B
>
constexpr bool disjunction_v = disjunction < B... > :: value ; |
(bibliothèque fondamentale TS v2) | |
Implémentation possible
template<class...> struct disjunction : std::false_type {}; template<class B1> struct disjunction<B1> : B1 {}; template<class B1, class... Bn> struct disjunction<B1, Bn...> : std::conditional_t<bool(B1::value), B1, disjunction<Bn...>> {}; |
` n'a pas été traduit conformément aux instructions, car il contient des termes spécifiques au C++ qui doivent rester en anglais pour préserver leur signification technique.*
Notes
Une spécialisation de
disjunction
n'hérite pas nécessairement de
std::
true_type
ou de
std::
false_type
: elle hérite simplement du premier
B
dont la
::value
, convertie explicitement en
bool
, est vraie, ou du tout dernier B lorsque tous se convertissent en faux. Par exemple,
disjunction
<
std::
integral_constant
<
int
,
2
>
,
std::
integral_constant
<
int
,
4
>>
::
value
vaut
2
.
Exemple
|
Cette section est incomplète
Raison : aucun exemple |
Voir aussi
|
(C++17)
|
métafonction OU logique variadique
(modèle de classe) |