https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57997
--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> --- Author: redi Date: Wed May 2 16:41:46 2018 New Revision: 259844 URL: https://gcc.gnu.org/viewcvs?rev=259844&root=gcc&view=rev Log: PR libstdc++/83860 avoid dangling references in valarray closure types Store nested closures by value not by reference, to prevent holding invalid references to temporaries that have been destroyed. This changes the layout of the closure types, so change their linkage names, but moving them to a different namespace. PR libstdc++/57997 PR libstdc++/83860 * include/bits/gslice_array.h (gslice_array): Define default constructor as deleted, as per C++11 standard. * include/bits/mask_array.h (mask_array): Likewise. * include/bits/slice_array.h (slice_array): Likewise. * include/bits/valarray_after.h (_GBase, _GClos, _IBase, _IClos): Move to namespace __detail. (_GBase::_M_expr, _IBase::_M_expr): Use _ValArrayRef for type of data members. * include/bits/valarray_before.h (_ValArrayRef): New helper for type of data members in closure objects. (_FunBase, _ValFunClos, _RefFunClos, _UnBase, _UnClos, _BinBase) (_BinBase2, _BinBase1, _BinClos, _SBase, _SClos): Move to namespace __detail. (_FunBase::_M_expr, _UnBase::_M_expr, _BinBase::_M_expr1) (_BinBase::_M_expr2, _BinBase2::_M_expr1, _BinBase1::_M_expr2) (_SBase::_M_expr): Use _ValArrayRef for type of data members. * include/std/valarray (_UnClos, _BinClos, _SClos, _GClos, _IClos) (_ValFunClos, _RefFunClos): Move to namespace __detail and add using-declarations to namespace std. * testsuite/26_numerics/valarray/83860.cc: New. Added: trunk/libstdc++-v3/testsuite/26_numerics/valarray/83860.cc Modified: trunk/libstdc++-v3/ChangeLog trunk/libstdc++-v3/include/bits/gslice_array.h trunk/libstdc++-v3/include/bits/mask_array.h trunk/libstdc++-v3/include/bits/slice_array.h trunk/libstdc++-v3/include/bits/valarray_after.h trunk/libstdc++-v3/include/bits/valarray_before.h trunk/libstdc++-v3/include/std/valarray