Когда у меня есть такая функция:
std::vector<std::experimental::filesystem::directory_entry> Foo(const std::string& start)
{
    std::vector<std::experimental::filesystem::directory_entry> result;
    auto paths = std::experimental::filesystem::directory_iterator(start);
    for (auto& d : paths) {
        if (IsDirectory(d)) {
            result.push_back(d);
        }
    }
    return result;
}
требуется ли выполнять копию записи каталога при итерации по коллекции paths с использованием auto d вместо auto& d?
Моя интуиция говорит следующее:
- При итерации 
pathsвозвращается ссылка типаstd::experimental::filesystem::v1::directory_entry&. - Затем я передаю его вектору, 
push_backкоторого имеет следующую сигнатуру:void push_back (const value_type& val) 
Я думаю, это означает, что после того, как я верну вектор из функции, он будет содержать элементы, которые относятся к памяти, которая уже была освобождена, поэтому у меня проблемы.
Итак, вопрос: мне нужно заменить его на auto d или я что-то упускаю?