Extensão vitalícia de um retorno initializer_list
Então, eu tenho um lambda que é o tipo de retorno éauto
e estou tendo problemas com o suporte da matriz para uminitializer_list
sendo destruído aqui:
const auto foo = [](const auto& a, const auto& b, const auto& c) { return {a, b, c}; };
Eu vou usar o lambda assim:
auto bar = foo(1, 2, 3);
for(const auto& i : bar) cout << i << endl;
Um trabalho em que estou trabalhando tem como parte do padrão de codificação que todas as lambdas são declarações únicas (sinta-se à vontade para expressar sua indignação.) Acho que posso contornar isso:
Dandofoo
um tipo de retorno devector int
, mas isso atrapalha o quão bem genérico é:const auto foo = [](const auto& a, const auto& b, const auto& c) -> vector<int> { return {a, b, c}; }
Apenas escrevendo uma função de modelo que constrói umvector<T>
e retorna:template <typename T> vector<T> foo(const T& a, const T& b, const T& c){ return {a, b, c}; }
É possível coagir essas variáveis em um contêiner, cujo apoio não será destruído tudo em uma linha para que eu possa manter o lambda com umauto
tipo de retorno?