2

GCC と Clang (または、それぞれ libstdc++ と libc++) の両方が同意します。

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

を受け取る非明示的なコンストラクターがあるtrueため、これを期待する必要があります。std::tuple<T, U>pair

tupleただし、 a から 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