Files
cppdraft_translate/cppdraft/concept/convertible.md
2025-10-25 03:02:53 +03:00

2.1 KiB
Raw Permalink Blame History

[concept.convertible]

18 Concepts library [concepts]

18.4.4 Concept convertible_to [concept.convertible]

1

#

Given types From and To and an expression E whose type and value category are the same as those of declval(),convertible_to<From, To> requires E to be both implicitly and explicitly convertible to type To.

The implicit and explicit conversions are required to produce equal results.

🔗

template<class From, class To> concept [convertible_to](#concept:convertible_to "18.4.4Concept convertible_­to[concept.convertible]") = is_convertible_v<From, To> && requires { static_cast<To>(declval<From>()); };

2

#

Let FromR be add_rvalue_reference_t andtest be the invented function:To test(FromR (&f)()) {return f();} and let f be a function with no arguments and return type FromR such that f() is equality-preserving.

Types From and To model convertible_to<From, To> only if:

  • (2.1)

    To is not an object or reference-to-object type, orstatic_cast(f()) is equal to test(f).

  • (2.2)

    FromR is not a reference-to-object type, or

    • (2.2.1)

      If FromR is an rvalue reference to a non const-qualified type, the resulting state of the object referenced by f() after either above expression is valid but unspecified ([lib.types.movedfrom]).

    • (2.2.2)

      Otherwise, the object referred to by f() is not modified by either above expression.