Редактировать: Я думаю, что наиболее вероятный вариант использования того, о чем я спрашиваю, это при создании функции, которая получает кортеж rvalue-ссылок от std::forward_as_tuple()
.
Причина, по которой этот вопрос пришел в голову, состоит в том, что я проверял членов объектов, переданных инициализаторам конструктора, чтобы определить, являются ли они ссылками на rvalue (я открыт для советов, говорящих мне, что это неправильно, неправильно, неправильно... надеюсь, за этим последует эмпирическое правило, чтобы избежать этого в будущем, но это то, что вызвало вопрос).Мне пришло в голову, что в несколько ином контексте я мог бы в конечном итоге передать объект, имеющий элементы rvalue-reference, нескольким функциям (или функциональным объектам), которые я могу контролировать или не контролировать, которые могут выполнять перемещения из этих членов.
template<typename... Args>
void my_func(std::tuple<Args...>&& tup) {
//if tup's members are rvalue references,
//and this function moves guts from tup members, then...
func_i_dont_control(tup);
//what happens here if moves are done on the same members?
another_func_i_dont_control(std::move(tup));
}
Я смотрел на Использовать ссылочные члены rvalue? , наряду с некоторыми другими обсуждениями ссылочных членов rvalue, но я не совсем в состоянии окончательно разобраться в этом.
Я не просто спрашиваю, что произойдет, но должен ли этот сценарий случиться или вообще вообще случиться, и какие ключевые правила следует помнить при передаче объектов, содержащих элементы rvalue-reference.