Ответы Mail.ru: Непонятная ошибка с итераторами из возвращаемого функцией vector.

При возвращении из функции по значению вызывается конструктор копирования, который создаёт анонимную копию объекта и передаёт её вызывающему коду. С этим анонимным объектом и работает цикл. После выхода кода из цикла анонимный объект удаляется.

Убедится в том, что в цикле вызывающий код обращается к функции всего один раз можно по нижеследующему примеру, если в отладчике установить точку останова в 9 строке и пройтись по циклу с «Шагом с заходом»

 #include  
#include  
using namespace std; 
vector fill() { 
    vector temp{ 1,2,3,4,5,6,7,8,9,10 }; 
    return temp; 
} 
int main() { 
    for (auto i : fill()) { 
        cout << i << ' '; 
    } 
    puts(""); 
}