#include <iostream>
#include <string>
#include <thread>
template <typename T>
class Queue
{
public:
T pop() {}
void push(const T& item) {}
};
void produce(Queue<int>& q) {
q.push(1234);
}
// wenn diese Funktion auskommentiert ist, funktioniert es
void produce(Queue<std::string>& q) {
q.push("Hallo");
}
int main()
{
Queue<int> my_queue;
auto f = std::bind(static_cast<void (*) (Queue<int>&)> (produce), my_queue); // <<< FEHLER
// Alternative
auto g = [&] () { produce (my_queue); };
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dGhyZWFkPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIFF1ZXVlCnsKIHB1YmxpYzoKICBUIHBvcCgpIHt9CiAgdm9pZCBwdXNoKGNvbnN0IFQmIGl0ZW0pIHt9Cn07Cgp2b2lkIHByb2R1Y2UoUXVldWU8aW50PiYgcSkgewogICAgcS5wdXNoKDEyMzQpOwp9CgovLyB3ZW5uIGRpZXNlIEZ1bmt0aW9uIGF1c2tvbW1lbnRpZXJ0IGlzdCwgZnVua3Rpb25pZXJ0IGVzCnZvaWQgcHJvZHVjZShRdWV1ZTxzdGQ6OnN0cmluZz4mIHEpIHsKICAgcS5wdXNoKCJIYWxsbyIpOwp9CgppbnQgbWFpbigpCnsKICBRdWV1ZTxpbnQ+IG15X3F1ZXVlOwogIGF1dG8gZiA9IHN0ZDo6YmluZChzdGF0aWNfY2FzdDx2b2lkICgqKSAoUXVldWU8aW50PiYpPiAocHJvZHVjZSksIG15X3F1ZXVlKTsgLy8gPDw8ICBGRUhMRVIKICAKICAvLyBBbHRlcm5hdGl2ZQogIGF1dG8gZyA9IFsmXSAoKSB7IHByb2R1Y2UgKG15X3F1ZXVlKTsgfTsKfQ==