Предположим, что у меня есть следующая функция:
void foo(std::vector<int> vec, int n);
Если я вызываю функцию следующим образом:
std::vector<int> numbers { 2, 3, 5, 7, 11, 13, 17, 19 };
foo(std::move(numbers), numbers[0]);
Все аргументы полностью оцениваются до привязки к их параметрам? В этом случае std::move безвреден, потому что он просто дает значение x, относящееся к numbers. Или каждый отдельный аргумент может быть сразу привязан к его параметру сразу после его оценки? В этом случае numbers[0] может вызвать поведение undefined, поскольку numbers уже может быть перенесен в vec.