home | help
std::experi...disjunction(3)   C++ Standard Libary  std::experi...disjunction(3)

NAME
     std::experimental::disjunction - std::experimental::disjunction

Synopsis
	Defined in header <experimental/type_traits>
	template<  class...  B >			(library fundamentals TS
     v2)
	struct disjunction;

	Forms the logical disjunction of the type traits B..., effectively  per-
     forming a
	logical or on the sequence of traits.

	The  specialization  std::experimental::disjunction<B1,  ...,  BN> has a
     public and
	unambiguous base that is

	  * if sizeof...(B) == 0, std::false_type; otherwise
	  * the first type Bi in B1, ..., BN for which bool(Bi::value) ==  true,
     or BN if
	    there is no such type.

	The  member  names  of the base class, other than disjunction and opera-
     tor=, are not
	hidden and are unambiguously available in disjunction.

	Disjunction is short-circuiting: if there is a template type argument Bi
     with
	bool(Bi::value)  !=  false,  then  instantiating  disjunction<B1,   ...,
     BN>::value does
	not require the instantiation of Bj::value for j > i.

Template parameters
	B...  -  every	template argument Bi for which Bi::value is instantiated
     must be usable
	       as a base class and define member value that  is  convertible  to
     bool

	Helper variable template

	template< class... B >
	constexpr  bool disjunction_v = 			 (library funda-
     mentals TS v2)
	disjunction<B...>::value;

Possible implementation
	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...>>  {};

Notes
	A specialization of disjunction does not necessarily inherit from of ei-
     ther
	std::true_type or std::false_type: it simply inherits from the	first  B
     whose
	::value,  explicitly converted to bool, is true, or from the very last B
     when all of
	them  convert  to  false.  For	example,  disjunction<std::integral_con-
     stant<int, 2>,
	std::integral_constant<int, 4>>::value is 2.

Example
	 This section is incomplete
	 Reason: no example

See also
	disjunction variadic logical OR metafunction
	(C++17)     (class template)

Category:
	  * Todo no example

http://cppreference.com 	   2024.06.10	    std::experi...disjunction(3)

home | help