std::experimental::ranges::Common - cppreference.com (original) (raw)

| | | | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ----------- | | template< class T, class U > concept bool Common = Same<ranges::common_type_t<T, U>, ranges::common_type_t<U, T>> && ConvertibleTo<T, ranges::common_type_t<T, U>> && ConvertibleTo<U, ranges::common_type_t<T, U>> && CommonReference< std::add_lvalue_reference_t<const T>, std::add_lvalue_reference_t<const U>> && CommonReference< std::add_lvalue_reference_t<ranges::common_type_t<T, U>>, ranges::common_reference_t< std::add_lvalue_reference_t<const T>, std::add_lvalue_reference_t<const U>>>; | | (ranges TS) |

The concept Common<T, U> specifies that two types T and U share a common type (as computed by ranges::common_type_t) to which both can be converted.

Common<T, U> is satisfied only if, given expressions t and u such that decltype((t)) is T and decltype((u)) is U,

In other words, the conversion to the common type must not alter the equality-preservation property of the original expression.

[edit] Equality preservation

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

Every expression required to be equality preserving is further required 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.

[edit] See also