Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/concepts/convertible to"

From cppreference.com
< cpp‎ | concepts
(LWG3194)
m (add russian lang link)
Line 30: Line 30:
 
{{dsc end }}
 
{{dsc end }}
  
{{langlinks|es|ja|zh}}
+
{{langlinks|es|ja|zh|ru}}

Revision as of 13:13, 28 April 2020

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

concept convertible_to =
  std::is_convertible_v<From, To> &&
  requires(std::add_rvalue_reference_t<From> (&f)()) {
    static_cast<To>(f());

  };
(since C++20)

The concept convertible_to<From, To> specifies that an expression of the type and value category specified by From can be implicitly and explicitly converted to the type To, and the two forms of conversion are equivalent.

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-object 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

Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise).

See also

checks if a type can be converted to the other type
(class template) [edit]