命名空间
变体
操作

std::convertible_to (自 C++20 起)

来自 cppreference.com
< cpp‎ | 概念
定义在头文件 <concepts>
template< class From, class To >

concept convertible_to =
    std::is_convertible_v<From, To> &&
    requires {
        static_cast<To>(std::declval<From>());

    };
(自 C++20 起)

概念 convertible_to<From, To> 指定了与 std::declval<From>() 具有相同类型和值类别的表达式可以隐式和显式转换为类型 To,并且两种转换形式产生相等的结果。

内容

[编辑] 语义要求

convertible_to<From, To> 仅在以下情况下建模:给定一个类型为 std::add_rvalue_reference_t<From>() 的函数 fun,使得表达式 fun()相等性保持 的,

  • 要么
    • To 不是对象类型或指向对象的引用类型,或者
    • static_cast<To>(fun()) 等于 []() -> To { return fun(); }(),并且
  • 以下之一为真
    • std::add_rvalue_reference_t<From> 不是指向对象的引用类型,或者
    • std::add_rvalue_reference_t<From> 是指向非 const 限定类型的右值引用,并且 fun() 所引用的对象的最终状态在上述任一表达式之后都是有效的,但未指定;或者
    • fun() 所引用的对象未被上述任一表达式修改。

[编辑] 相等性保持

requires 表达式 中声明的标准库概念表达式必须是 相等性保持 的(除非另有说明)。

[编辑] 参考资料

  • C++23 标准 (ISO/IEC 14882:2024)
  • 18.4.4 概念 convertible_to [concept.convertible]
  • C++20 标准 (ISO/IEC 14882:2020)
  • 18.4.4 概念 convertible_to [concept.convertible]

[编辑] 另请参阅

检查一个类型是否可以转换为另一个类型
(类模板) [编辑]