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是哪个构造函数?