Hello, please consider the little program below which was compiled on GCC 4.7.0.

At the line containing the comment /* auto */, when using auto instead of 
vector<int>, the expected result which would be [3][6][9][12][15] is computed 
as [6][12][15][15][15] for some reason. Despite the high chance of the fault 
probably being mine, I think it'd be interesting either-way.

#include <thread>
#include <iostream>
#include <vector>

using namespace std;

#define NUM_OF_THREADS 5

int data[NUM_OF_THREADS] = {0};

void add(int* dest, const vector<int>& arr) {
        *dest = 0;
        for ( const auto& x : arr ) {
                *dest += x;
        }
}

int main(void) {
        vector<thread> threads;
        // data[i] := i + i+1 + i+2
        for ( int i=0; i<NUM_OF_THREADS; ++i ) {
/*              auto */ vector<int> arr = {i,i+1,i+2};
                threads.push_back( thread{add,data+i,arr} );
        }

        for ( auto& thread : threads ) {
                thread.join();
        }

        for ( const auto& dat : data ) {
                cout << "[" << dat << "]";
        } cout << endl;

        return 0;
}

Amit Markel

Reply via email to