2

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

4

0 回答 0