質問

std::tie returns a tuple of references, so you can do the following:

int foo, bar, baz;
std::tie(foo, bar, baz) = std::make_tuple(1, 2, 3);

This is similar to foo, bar, baz = (1, 2, 3) in Python.

What is supposed to happen if one of the assignments throws, as in the following example?

int foo = 1337;
struct Bar {
    Bar& operator=(Bar) { throw std::exception{}; }
} bar;
try {
    std::tie(foo, bar) = std::make_tuple(42, Bar{});
} catch (std::exception const&) {
    std::cout << foo << '\n';
}

Will it print 1337 or 42, or is this unspecified?

役に立ちましたか?

解決

The Standard speaks of tuple assignment art §20.4.2.2 [tuple.assign], the only mention of exception is that the assignment should not throw unless one of the elements assigned to throws.

Since there is no mention of the order in which elements are assigned to, it is thus unspecified.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top