从std :: tuple <t,u =“”>转换为std :: pair <t,u =“”>

时间:2015-06-16 07:40:59

标签: c++ c++11 language-lawyer std-pair stdtuple

GCC和Clang(或者分别是libstdc ++和libc ++)同意

std::is_convertible<std::pair<int, int>, std::tuple<int, int>>::value

true,由于std::tuple<T, U>有一个非显式构造函数占用pair,所以应该期待它。

从另一个方向走,从tuplepair,实施不同意:

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

0 个答案:

没有答案