std::convertible_to (C++20 起)

来自cppreference.com
< cpp‎ | concepts
在标头 <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 类型,而二种转换形式产生相等的结果。

语义要求

给定 std::add_rvalue_reference_t<From>() 类型的函数 fun,使得表达式 fun() 保持相等性,仅当满足以下条件时,convertible_to<From, To> 得以实现:

  • 以下任一成立
    • 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 Concept convertible_to [concept.convertible]
  • C++20 标准(ISO/IEC 14882:2020):
  • 18.4.4 Concept convertible_to [concept.convertible]

参阅

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