vector( std::initializer_list<T> init, const Allocator& alloc = Allocator() );
Objarr var1{ "Строка1", "Строка2", "Строка3" };
Objarr var2{ "Строка1", "Строка2" };
Objarr var3{ "Строка1", "Строка2", "Строка3", "Строка4", "Строка5" };
std::vector<int> temp{ 4, 8, 15, 16, 23, 42 };
...if the function is redeclared in the same scope.
Вторая проблема, не дающая собрать код, это противоречащие объявления этой функции - в одном случае аргумент по умолчанию есть, во втором - нет.
не прибегая к граф библиотекам,аля directX ,openGL
@devalone : Почитай что-нибудь про указатели и ссылки в C++
Чаще всего возвращаемые по значению объекты перемещаются в принимающие результат функции места. Твой `out` будет возвращен по значению, но он не будет скопирован, а будет перемещен.
И это совсем не страшно, а наоборот - очень хорошо.
К тому же, есть Copy elision, благодаря которому объекта `out` в твоей функции и вовсе не будет, а все манипуляции будут производиться на том объекте, который примет результат функции `copy_list`.