Я играю с функциями потоков С++ 11. Но следующий код не компилируется как для clang (3.5), так и для gcc (4.9.2).
#include <iostream>
#include <thread>
void add(int& x) {
x += 1;
}
int main (int argc, char const *argv[])
{
int x{ 5 };
int y{ 8 };
std::thread my_thread_1{ add, x };
std::thread my_thread_2{ add, y };
my_thread_1.join();
my_thread_2.join();
std::cout << x << " " << y << std::endl;
return 0;
}
Действительно ли это С++ 11?
Он действителен, но класс потока копирует его аргументы, поэтому вы не можете использовать ссылки напрямую. Вы должны использовать std::ref
чтобы заставить его работать:
std::thread my_thread_1{ add, std::ref(x) };