std::is_convertible 和 std::convertible_to 之间的区别(实际上)?

Differences between std::is_convertible and std::convertible_to (in practice)?

根据en.cppreference.com(据我所知):

std::is_convertible 提出的要求似乎比较直截了当。相反,std::convertible_tor 值引用 转换要求对于 C++20 功能的简单示例中显示的这种通用概念来说似乎很奇怪。

作为 C++ 的新手,我无法完全理解两个网页中提供的一些术语和部分补充说明,我无法想象两者的要求之间的确切差异。

一些相互关联的问题:

更简单的解释或示例会有所帮助。谢谢!

std::is_convertible<From, To>(类型特征)检查类型 From 隐式 可转换为类型 To.

std::convertible_to<From, To>(概念)检查 From 是否 隐式和显式 可转换为 To。这种情况很少见,这样的类型很荒谬,但在通用代码中很好 而不是 不必担心这种情况。

一个例子:

struct From;
struct To {
    explicit To(From) = delete;
};
struct From {
    operator To();
};

static_assert(std::is_convertible_v<From, To>);
static_assert(not std::convertible_to<From, To>);