什么时候std :: is_convertible_v <const type&,type>为false?

时间:2019-11-06 02:38:08

标签: c++ typetraits std-pair

当我遇到以下裁决时,我正在阅读std::pair的构造函数规则(如cppreference所述):

  

仅当std::is_convertible_v<const first_type&, first_type>falsestd::is_convertible_v<const second_type&, second_type>false时,此构造函数才是显式的。

如果std::is_convertible_v<From, To>可隐式转换为true,则

FromTo,如果不是,则为false

但是在什么情况下,像std::is_convertible_v<const T &, T>这样的情况将是false? 我已经考虑了一段时间了,实际上我没有想到任何附属的东西。 在我看来,对类型为T的const值的引用将始终可以转换为类型为T的值。

1 个答案:

答案 0 :(得分:3)

std::is_convertible_v检查是否为隐式转换。如果存在std::is_convertible_v<const T &, T>隐式复制构造函数,则true返回T

struct S {
  explicit S(const S &) = default;
};

S具有显式副本构造函数,因此std::is_copy_constructible_v<S>true,而std::is_convertible_v<const S &, S>falsestd::pair的副本构造函数应为explicit,以匹配first_type的副本构造函数,因此当{{ 1}}是std::pair