Namespaces
Variants

std::experimental::ranges:: ConvertibleTo

From cppreference.net
template < class From, class To >

concept bool ConvertibleTo =
std:: is_convertible < From, To > :: value &&
requires ( From ( & f ) ( ) ) {
static_cast < To > ( f ( ) ) ;

} ;
(ranges TS)

概念 ConvertibleTo < From, To > 规定:由 From 指定的类型和值类别表达式,必须能隐式或显式转换为 To 类型,且两种转换形式应具有等价效果。

具体而言, ConvertibleTo < From, To > 仅在满足以下条件时成立:给定虚构函数 To test ( From ( & f ) ( ) ) { return f ( ) ; } 及类型为 From ( ) 的函数 f ,且表达式 f ( ) 满足等值保持性(详见下文),

  • 要么
    • To 既不是对象类型也不是引用对象类型,或
    • static_cast < To > ( f ( ) ) 等于 test(f) ,且
  • 以下条件之一成立:
    • From 不是引用对象类型,或
    • From 是对非 const 限定类型的右值引用,且在上述任一表达式执行后,由 f ( ) 所引用对象的结果状态有效但未指定;或
    • 在上述任一表达式中均未修改由 f() 所引用的对象。

ConvertibleTo < From, To > std:: is_convertible < From, To > :: value 之间不需要存在任何包含关系。

等值保持性

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

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

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

除非另有说明,每个在 要求表达式 中使用的表达式都必须保持相等性且稳定,且该表达式的求值仅可修改其非常量操作数。常量操作数不得被修改。

另请参阅

检查一个类型是否能转换为另一个类型
(类模板)