Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

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
       performing 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 oper-
       ator=, are not
	  hidden and are unambiguously available in disjunction.

	  Disjunction is short-circuiting: if there is a template  type	 argu-
       ment 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  instanti-
       ated 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
       fundamentals 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
       either
	  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)

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

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::experimental::disjunction&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help