GCC 和 Clang(或者更确切地说分别是 libstdc++ 和 libc++)都同意
std::is_convertible<std::pair<int, int>, std::tuple<int, int>>::value
is true
,因为std::tuple<T, U>
有一个非显式构造函数采用pair
.
然而,在另一个方向上,从 atuple
到 a pair
,实现不同意:
static_assert(std::is_convertible<std::tuple<int, int>, std::pair<int, int>>::value,
"Cannot convert from tuple to pair");
GCC 失败,但 Clang 通过。我注意到std::pair
没有构造函数采用tuple
.
问题:
根据法律条文,是否允许后一种隐式转换?即这里哪个实现是正确的?
std::pair<int, int> p = std::make_tuple(3, 4);
在 Clang 下调用时,调用的std::pair
是哪个构造函数?