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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::incrementable - std::incrementable

Synopsis
	  Defined in header <iterator>
	  template<class I>

	  concept incrementable	=
	  std::regular<I> &&
	  std::weakly_incrementable<I> &&  (since C++20)
	  requires(I i)	{
	  { i++	} -> std::same_as<I>;

	  };

	  This concept specifies requirements on types that can	be incremented
       with the	pre-
	  and  post-increment operators, whose increment operations are	equal-
       ity-preserving,
	  and the type is std::equality_comparable.

	  Unlike with std::weakly_incrementable, which	only  support  single-
       pass algorithms,
	  multi-pass  one-directional  algorithms  can be used with types that
       model
	  std::incrementable.

	 Semantic requirements

	  I models std::incrementable only if given any	two incrementable  ob-
       jects a and b of
	  type I:

	    * bool(a ==	b) implies bool(a++ == b), and
	    * bool(a ==	b) implies bool(((void)a++, a) == ++b)

	 Equality preservation

	  An  expression is equality preserving	if it results in equal outputs
       given equal
	  inputs.

	    * The inputs to an expression consist of its operands.
	    * The outputs of an	expression  consist  of	 its  result  and  all
       operands	modified by
	      the expression (if any).

	  In  specification  of	standard concepts, operands are	defined	as the
       largest
	  subexpressions that include only:

	    * an id-expression,	and
	    * invocations of std::move,	std::forward, and std::declval.

	  The cv-qualification and value category of each  operand  is	deter-
       mined by	assuming
	  that	each template type parameter denotes a cv-unqualified complete
       non-array object
	  type.

	  Every	expression required to be equality preserving is  further  re-
       quired to be
	  stable:  two	evaluations  of	such an	expression with	the same input
       objects must have
	  equal	outputs	absent any explicit intervening	modification of	 those
       input objects.

	  Unless  noted	otherwise, every expression used in a requires-expres-
       sion is required
	  to be	equality preserving and	stable,	and the	evaluation of the  ex-
       pression	may
	  modify  only	its  non-constant operands. Operands that are constant
       must not	be
	  modified.

See also
	  weakly_incrementable specifies that a	semiregular type can be	incre-
       mented with pre-
	  (C++20)	       and post-increment operators
			       (concept)
	  same_as	       specifies that a	type is	the  same  as  another
       type
	  (C++20)	       (concept)

http://cppreference.com		  2022.07.31		 std::incrementable(3)

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

home | help