Я вполне уверен, что не может.
Даже если внешняя функция больше не использует переменную явно, перемещение переменной изменит семантику уничтожения.
Наличие конструкторов перемещения для Image
не помогает, vector
может move
или swap
без перемещения его элементов.
Если с этого момента переменная доступна только для чтения, почему бы не захватить ее по ссылке? Вы даже можете создать константную ссылку и захватить ее.
Если переменная не только для чтения, копия требуется. Не имеет значения, выполняет ли модификация внешняя функция или лямбда, компилятор не может позволить, чтобы эта модификация стала видимой для другой.
Единственное различие, которое я вижу между захватом по значению и передачей аргумента по значению , заключается в том, что захват именован, он не может быть временным. Таким образом, оптимизация передачи аргументов, применимая к временным объектам, не может быть использована.