https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62119
Bug ID: 62119 Summary: dangling reference : gslice_array's copy constructor Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: faithandbrave at gmail dot com follow code happens segmentation fault by dangling deference. #include <iostream> #include <valarray> #include <numeric> int main() { std::valarray<int> v(15); std::iota(std::begin(v), std::end(v), 0); const std::size_t start = 1u; const std::valarray<std::size_t> lengths = {3u, 2u}; const std::valarray<std::size_t> strides = {5u, 1u}; // here std::gslice_array<int> result = v[std::gslice(start, lengths, strides)]; result = 99; for (int x : v) { std::cout << x << std::endl; } } gslice_array.h private: const valarray<size_t>& _M_index; template<typename _Tp> inline gslice_array<_Tp>::gslice_array(const gslice_array<_Tp>& __a) : _M_array(__a._M_array), _M_index(__a._M_index) {}