Namespaces
Variants

std::experimental::ranges:: Common

From cppreference.net
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)

概念 Common<T, U> 规定两个类型 T U 共享一个 公共类型 (通过 ranges::common_type_t 计算得出),两者均可转换为该类型。

Common<T, U> 仅在满足以下条件时成立:给定表达式 t u ,使得 decltype ( ( t ) ) T decltype ( ( u ) ) U

换言之,转换为通用类型不得改变原始表达式的保等性。

等值保持性

表达式若在给定相等输入时产生相等输出,则称其具有 等值保持性

  • 表达式的输入由其操作数构成。
  • 表达式的输出由其结果及所有被该表达式修改的操作数(如有)构成。

所有要求保持相等性的表达式必须进一步满足 稳定性 要求:对此类表达式进行两次求值时,若输入对象相同且期间未显式修改这些输入对象,则必须产生相等的输出结果。

参见

确定一组类型的公共类型
(类模板)
确定一组类型的公共引用类型
(类模板)
指定两种类型共享公共引用类型
(概念)