W poniższym:powrót i auto wywieść std :: initializer_list
auto x = {0}; // auto deduction of std::initializer_list<int>
auto y = []() -> std::initializer_list<int> { return {0}; }(); //explicit
auto z = []() { return {0}; }(); // won't compile
dlaczego nie jest możliwe, aby powrócić i auto wywnioskować typ std :: initializer_list?
Próbowałaś 'auto z = []() -> auto {return {0}; }(); '? –
Zauważ, że ** nie ** chcesz, aby i tak wyprowadzał 'initializer_list', ponieważ wartości na liście mają czas życia lambda - nie są przedłużane przez funkcję return. Są niszczone, zanim użyjesz 'y' lub' z'. [Więcej informacji] (http://stackoverflow.com/questions/15286450/lifetime-of-a-ddinitializer-list-return-value). Linia 'y' powoduje UB. –