std::experimental:: disjunction
|
Definido en el encabezado
<experimental/type_traits>
|
||
|
template
<
class
...
B
>
struct disjunction ; |
(biblioteca fundamentals TS v2) | |
Forma la
disyunción lógica
de los rasgos de tipo
B...
, efectuando una operación lógica or sobre la secuencia de rasgos.
La especialización std :: experimental :: disjunction < B1, ..., BN > tiene una base pública e inequívoca que es
- si sizeof... ( B ) == 0 , std:: false_type ; de lo contrario
-
el primer tipo
BienB1, ..., BNpara el cual bool ( Bi :: value ) == true , oBNsi no existe tal tipo.
Los nombres de los miembros de la clase base, excepto
disjunction
y
operator=
, no están ocultos y están disponibles de manera inequívoca en
disjunction
.
La disyunción es de cortocircuito: si hay un argumento de tipo de plantilla
Bi
con
bool
(
Bi
::
value
)
!
=
false
, entonces instanciar
disjunction
<
B1, ..., BN
>
::
value
no requiere la instanciación de
Bj
::
value
para
j > i
.
Contenidos |
Parámetros de plantilla
| B... | - |
cada argumento de plantilla
Bi
para el cual
Bi
::
value
está instanciado debe ser utilizable como clase base y definir el miembro
value
que sea convertible a
bool
|
Plantilla de variable auxiliar
|
template
<
class
...
B
>
constexpr bool disjunction_v = disjunction < B... > :: value ; |
(biblioteca fundamentals TS v2) | |
Implementación posible
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...>> {}; |
Notas
Una especialización de
disjunction
no necesariamente hereda de
std::
true_type
o
std::
false_type
: simplemente hereda del primer
B
cuyo
::value
, convertido explícitamente a
bool
, es verdadero, o del último B cuando todos se convierten a falso. Por ejemplo,
disjunction
<
std::
integral_constant
<
int
,
2
>
,
std::
integral_constant
<
int
,
4
>>
::
value
es
2
.
Ejemplo
|
Esta sección está incompleta
Razón: sin ejemplo |
Véase también
|
(C++17)
|
metafunción OR lógica variádica
(plantilla de clase) |