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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::experimental::conjunction -	std::experimental::conjunction

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

	  Forms	the logical conjunction	of the type traits  B...,  effectively
       performing a
	  logical AND on the sequence of traits.

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

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

	  The member names of the base class, other than conjunction and oper-
       ator=, are not
	  hidden and are unambiguously available in conjunction.

	  Conjunction is short-circuiting: if there is a template  type	 argu-
       ment Bi with
	  bool(Bi::value)  ==  false,  then instantiating conjunction<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  conjunction_v  =			      (library
       fundamentals TS v2)
	  conjunction<B...>::value;

Possible implementation
	  template<class...> struct conjunction	: std::true_type { };
	  template<class B1> struct conjunction<B1> : B1 { };
	  template<class B1, class... Bn>
	  struct conjunction<B1, Bn...>
	      :	 std::conditional_t<bool(B1::value),  conjunction<Bn...>,  B1>
       {};

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

Example
       // Run this code

	// func	is enabled if all Ts...	have the same type
	template<typename T, typename... Ts>
	std::enable_if_t<std::experimental::conjunction_v<std::is_same<T,
       Ts>...> >
	func(T,	Ts...) {
	 // TODO something to show
	}

See also
	  conjunction variadic logical AND metafunction
	  (C++17)     (class template)

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

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

home | help