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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::convertible_to - std::convertible_to

Synopsis
	  Defined in header <concepts>
	  template <class From,	class To>

	  concept convertible_to =
	  std::is_convertible_v<From, To> &&	  (since C++20)
	  requires {
	  static_cast<To>(std::declval<From>());

	  };

	  The concept convertible_to<From, To> specifies that an expression of
       the same	type
	  and  value  category as those	of std::declval<From>()	can be implic-
       itly and	explicitly
	  converted to the type	To, and	the two	forms of conversion are	equiv-
       alent.

	 Semantic requirements

	  convertible_to<From, To> is modeled only if, given a function	fun of
       type
	  std::add_rvalue_reference_t<From>() such that	the  expression	 fun()
       is
	  equality-preserving (see below),

	    * Either

		 *  To	is  neither  an	 object	type nor a reference-to-object
       type, or
		 * static_cast<To>(fun()) is equal to  []()  ->	 To  {	return
       fun(); }(), and

	    * One of the following is true:

		 * std::add_rvalue_reference_t<From> is	not a reference-to-ob-
       ject type, or
		 * std::add_rvalue_reference_t<From> is	an rvalue reference to
       a
		   non-const-qualified	type,  and  the	resulting state	of the
       object referenced
		   by fun() is valid but unspecified after  either  expression
       above; or
		 *  the	 object	referred to by fun() is	not modified by	either
       expression above.

	 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
	  is_convertible
	  is_nothrow_convertible  checks  if  a	 type  can be converted	to the
       other type
	  (C++11)		 (class	template)
	  (C++20)

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

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

home | help