C++ std::何时可转换;常数类型&;,类型>;是假的吗?
我在阅读C++ std::何时可转换;常数类型&;,类型>;是假的吗?,c++,typetraits,std-pair,C++,Typetraits,Std Pair,我在阅读std::pair(如上所述)的构造函数规则时,遇到了以下规则: 当且仅当std::is\u convertible\u v为false或std::is\u convertible\u v为false时,此构造函数才显式 std::is_convertable\u v如果From隐式转换为to,则为true,如果不是这样,则为false 但是,在什么情况下,像std::is_v这样的案例会是false? 我已经想了一段时间了,我真的想不出任何即时的。 在我看来,对T类型的常量值的引用总是
std::pair
(如上所述)的构造函数规则时,遇到了以下规则:
当且仅当std::is\u convertible\u v
为false
或std::is\u convertible\u v
为false
时,此构造函数才显式
std::is_convertable\u v
如果From
隐式转换为to
,则为true
,如果不是这样,则为false
但是,在什么情况下,像std::is_v这样的案例会是false
?
我已经想了一段时间了,我真的想不出任何即时的。
在我看来,对
T
类型的常量值的引用总是可以转换为T
类型的值std::is\u convertible\u v
检查隐式转换<如果存在T
的隐式复制构造函数,则code>std::is\u convertible\u v返回true
struct S {
explicit S(const S &) = default;
};
S
有一个显式的复制构造函数,因此std::is\u copy\u constructible\u v
是true
但是std::is\u convertible\u v
是false
。std::pair
的复制构造函数应该是explicit
,以匹配first\u type
的复制构造函数,因此当std::pair
是explicit
时,isconvertible\v
是false我想这可能是在检查T
是否为复制是可构造的,但如果是这样,为什么不使用std::is_copy_constructible_v
?也许它正在检查一个显式的复制构造函数。