Namespaces
Variants

std::experimental:: disjunction

From cppreference.net
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 Bi en B1, ..., BN para el cual bool ( Bi :: value ) == true , o BN si 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

Véase también

metafunción OR lógica variádica
(plantilla de clase)