On 5 May 2012 00:04, Amit Markel wrote:
> Hello, please consider the little program below which was compiled on GCC
> 4.7.0.
Your question is inappropriate on this list which is for discussing
development of GCC not with GCC. Your question would be appropriate
on the gcc-help list, please take any follow up there, thanks.
> /* auto */ vector<int> arr = {i,i+1,i+2};
With 'auto' here the type is not vector<int>, it's
std::initializer_list<int>, which is a lightweight utility type that
refers to a temporary array. An initializer_list is intended to be
used only as a temporary or other short-lived type.
In your code the initializer_list gets copied into the std::thread,
but then the temporary array it uses goes out of scope. When the add()
function runs a std::vector is constructed from the initializer_list,
copying the data from the invalid array that has already gone out of
scope.