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

FreeBSD Manual Pages

  
 
  

home | help
std::integral_constant(3)     C++ Standard Libary    std::integral_constant(3)

NAME
       std::integral_constant -	std::integral_constant

Synopsis
	  Defined in header <type_traits>
	  template< class T, T v >	   (since C++11)
	  struct integral_constant;

	  std::integral_constant wraps a static	constant of specified type. It
       is the base
	  class	for the	C++ type traits.

	  If  the program adds specializations for std::integral_constant, the
       behavior	is
	  undefined.

Specializations
	  Two typedefs for the common case where T is bool are provided:

	  Defined in header <type_traits>
	  Name	     Definition
	  true_type  std::integral_constant<bool, true>
	  false_type std::integral_constant<bool, false>

	  Nested types

	  Name	     Definition
	  value_type T
	  type	     std::integral_constant<T, v>

Member constants
	  Name		    Value
	  constexpr T value v
	  [static]	    (public static member constant)

Member functions
	  operator value_type returns the wrapped value
			      (public member function)
	  operator()	      returns the wrapped value
	  (C++14)	      (public member function)

       std::integral_constant::operator	value_type

	  constexpr operator value_type() const	noexcept;

	  Conversion function. Returns the wrapped value.

       std::integral_constant::operator()

	  constexpr value_type operator()() const noexcept;  (since C++14)

	  Returns the wrapped value. This function enables  std::integral_con-
       stant to	serve as
	  a source of compile-time function objects.

Possible implementation
	  template<class T, T v>
	  struct integral_constant
	  {
	      static constexpr T value = v;
	      using value_type = T;
	      using type = integral_constant; // using injected-class-name
	      constexpr	operator value_type() const noexcept { return value; }
	      constexpr	value_type operator()()	const noexcept { return	value;
       } // since c++14
	  };

Notes
		   Feature-test	      macro		    Value	   Std
       Feature
	  __cpp_lib_integral_constant_callable	201304L	  (C++14)   std::inte-
       gral_constant::operator()
	  __cpp_lib_bool_constant		201505L	(C++17)	std::bool_con-
       stant

Example
       // Run this code

	#include <type_traits>

	using two_t = std::integral_constant<int, 2>;
	using four_t = std::integral_constant<int, 4>;

	static_assert(not std::is_same_v<two_t,	four_t>);
	static_assert(two_t::value * 2 == four_t::value, "2*2 != 4");
	static_assert(two_t() << 1 == four_t() >> 0, "2*2 != 4");

	enum class E{ e1, e2 };
	using c1 = std::integral_constant<E, E::e1>;
	using c2 = std::integral_constant<E, E::e2>;
	static_assert(c1::value	!= E::e2);
	static_assert(c1() == E::e1);
	static_assert(std::is_same_v<c2, c2>);

	int main() {}

See also
	  integer_sequence implements compile-time sequence of integers
	  (C++14)	   (class template)

http://cppreference.com		  2024.06.10	     std::integral_constant(3)

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

home | help