GCC和Clang(或者分别是libstdc ++和libc ++)同意
std::is_convertible<std::pair<int, int>, std::tuple<int, int>>::value
是true
,由于std::tuple<T, U>
有一个非显式构造函数占用pair
,所以应该期待它。
从另一个方向走,从tuple
到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
。
问题:
根据法律规定,是否允许后者隐式转换?即哪个实施在这里是正确的?
在Clang下调用std::pair<int, int> p = std::make_tuple(3, 4);
时,正在调用哪个std::pair
构造函数?