#include <iostream>
#include <thread>
#include <unordered_map>
using namespace std;
class A {
public:
A(unordered_map<int, int>& m) : m(m) {
}
void Start() {
auto t = std::thread(test1, std::ref(m));
t.join();
}
private:
static void test1(unordered_map<int, int>& m) { // complie failed, if the ref change to value(remove &), it's ok, thats confused me
for (auto i : m) {
cout << i.first << i.second << endl;
}
}
unordered_map<int, int> & m;
};
int main() {
unordered_map<int, int> m = {{1,2}, {3,4}};
A a(m);
a.Start();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBBIHsgCiBwdWJsaWM6CiAgQSh1bm9yZGVyZWRfbWFwPGludCwgaW50PiYgbSkgOiBtKG0pIHsgIAogIH0KICB2b2lkIFN0YXJ0KCkgewogICAgYXV0byB0ID0gc3RkOjp0aHJlYWQodGVzdDEsIHN0ZDo6cmVmKG0pKTsgCiAgICB0LmpvaW4oKTsKICB9CiBwcml2YXRlOgogIHN0YXRpYyB2b2lkIHRlc3QxKHVub3JkZXJlZF9tYXA8aW50LCBpbnQ+JiAgbSkgeyAgLy8gY29tcGxpZSBmYWlsZWQsIGlmIHRoZSByZWYgY2hhbmdlIHRvIHZhbHVlKHJlbW92ZSAmKSwgaXQncyBvaywgdGhhdHMgY29uZnVzZWQgbWUKICAgIGZvciAoYXV0byBpIDogbSkgewogICAgICBjb3V0IDw8IGkuZmlyc3QgPDwgaS5zZWNvbmQgPDwgZW5kbDsKICAgIH0gICAKICB9CiAgdW5vcmRlcmVkX21hcDxpbnQsIGludD4gJiBtOwp9OwoKaW50IG1haW4oKSB7CiAgdW5vcmRlcmVkX21hcDxpbnQsIGludD4gbSA9IHt7MSwyfSwgezMsNH19OwogIEEgYShtKTsKICBhLlN0YXJ0KCk7Cn0KCg==