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
コンストラクターが呼び出されますか?