Есть ли правило, в котором указано, в каком порядке уничтожены члены std:: tuple?
Например, если Function1
возвращает std::tuple<std::unique_ptr<ClassA>, std::unique_ptr<ClassB>>
в Function2
, то могу ли я быть уверенным, что (когда область Function2
оставлена), экземпляр ClassB
, на который ссылается второй член, уничтожается перед экземпляром ClassA
, на который ссылается первый член?
std::tuple< std::unique_ptr< ClassA >, std::unique_ptr< ClassB > > Function1()
{
std::tuple< std::unique_ptr< ClassA >, std::unique_ptr< ClassB > > garbage;
get<0>(garbage).reset( /* ... */ );
get<1>(garbage).reset( /* ... */ );
return garbage;
}
void Function2()
{
auto to_be_destroyed = Function1();
// ... do something else
// to_be_destroyed leaves scope
// Is the instance of ClassB destroyed before the instance of ClassA?
}