Информация об изменениях

Сообщение Re: Правомерно ли такое от 17.08.2020 12:10

Изменено 17.08.2020 12:24 Маркуша Шулин

Re: Правомерно ли такое
Здравствуйте, Marty, Вы писали:

M>Здравствуйте!


M>
M>template<typename ItemType>
M>inline
M>std::vector<ItemType>& push_back_helper( std::vector<ItemType> &v, const ItemType &elem )
M>{
M>    v.push_back(elem);
M>    return v;
M>}

M>inline
M>std::vector<int> makeVec( int i )
M>{
M>    return push_back_helper( std::vector<int>(), i );
M>}

M>int main()
M>{
M>    auto v = makeVec( 3 );
M>}
M>

под майкрософт может работать без проблем. Под gcc будет лик, после передачи инстанса вектора он умрет при свертке стека (а именно после возврата из push_back_helper(std::vector<int>(), ... ) )У майкрософта была какая-то "оптимизация" по продлению жизни ссылки


M>Вроде ничему не противоречит, но решил уточнить
Re: Правомерно ли такое
Здравствуйте, Marty, Вы писали:

M>Здравствуйте!


M>
M>template<typename ItemType>
M>inline
M>std::vector<ItemType>& push_back_helper( std::vector<ItemType> &v, const ItemType &elem )
M>{
M>    v.push_back(elem);
M>    return v;
M>}

M>inline
M>std::vector<int> makeVec( int i )
M>{
M>    return push_back_helper( std::vector<int>(), i );
M>}

M>int main()
M>{
M>    auto v = makeVec( 3 );
M>}
M>

под майкрософт может работать без проблем. Под gcc будет сигфолт, после передачи инстанса вектора он умрет при свертке стека (а именно после возврата из push_back_helper(std::vector<int>(), ... ) )У майкрософта была какая-то "оптимизация" по продлению жизни ссылки


M>Вроде ничему не противоречит, но решил уточнить