Namespaces
Variants

std::experimental::ranges:: CommonReference

From cppreference.net
template < class T, class U >

concept bool CommonReference =
Same < ranges:: common_reference_t < T, U > , ranges:: common_reference_t < U, T >> &&
ConvertibleTo < T, ranges:: common_reference_t < T, U >> &&

ConvertibleTo < U, ranges:: common_reference_t < T, U >> ;
(ranges TS)

概念 CommonReference<T, U> 规定了两个类型 T U 共享一个 公共引用类型 (通过 ranges::common_reference_t 计算得出),两者均可转换至该类型。

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

换句话说,转换为公共引用类型不得改变原始表达式的等值保持特性。

等值保持性

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

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

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

参见

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