#include <functional>
#include <memory>
#include <utility>
#include <iostream>
template <typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args) {
return std::unique_ptr<T>{new T{std::forward<Args>(args)...}};
}
template <typename T>
class Movable {
T value;
public:
explicit Movable(T value) :
value{std::move(value)} {}
~Movable() { std::cout << "~Movable()" << std::endl; }
Movable(const Movable&) = delete;
Movable& operator = (const Movable&) = delete;
friend std::ostream& operator << (std::ostream& os, const Movable& m) {
return os << m.value;
}
};
int main() {
using namespace std::placeholders;
auto f = std::bind([](std::unique_ptr<Movable<int>>& p, int i, const char* s){
std::cout << *p << ' ' << i << ' ' << s << std::endl;
}, make_unique<Movable<int>>(42), _1, _2);
f(13, "Hello, ");
f(69, "World!");
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxtZW1vcnk+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4Kc3RkOjp1bmlxdWVfcHRyPFQ+IG1ha2VfdW5pcXVlKEFyZ3MmJi4uLiBhcmdzKSB7CiAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFQ+e25ldyBUe3N0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLn19Owp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KY2xhc3MgTW92YWJsZSB7CiAgICBUIHZhbHVlOwpwdWJsaWM6CiAgICBleHBsaWNpdCBNb3ZhYmxlKFQgdmFsdWUpIDoKICAgICAgICB2YWx1ZXtzdGQ6Om1vdmUodmFsdWUpfSB7fQogICAgfk1vdmFibGUoKSB7IHN0ZDo6Y291dCA8PCAifk1vdmFibGUoKSIgPDwgc3RkOjplbmRsOyB9CiAgICBNb3ZhYmxlKGNvbnN0IE1vdmFibGUmKSA9IGRlbGV0ZTsKICAgIE1vdmFibGUmIG9wZXJhdG9yID0gKGNvbnN0IE1vdmFibGUmKSA9IGRlbGV0ZTsKICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8IChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBNb3ZhYmxlJiBtKSB7CiAgICAgICAgcmV0dXJuIG9zIDw8IG0udmFsdWU7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OnBsYWNlaG9sZGVyczsKICAgIGF1dG8gZiA9IHN0ZDo6YmluZChbXShzdGQ6OnVuaXF1ZV9wdHI8TW92YWJsZTxpbnQ+PiYgcCwgaW50IGksIGNvbnN0IGNoYXIqIHMpewogICAgICAgIHN0ZDo6Y291dCA8PCAqcCA8PCAnICcgPDwgaSA8PCAnICcgPDwgcyA8PCBzdGQ6OmVuZGw7CiAgICB9LCBtYWtlX3VuaXF1ZTxNb3ZhYmxlPGludD4+KDQyKSwgXzEsIF8yKTsKICAgIGYoMTMsICJIZWxsbywgIik7CiAgICBmKDY5LCAiV29ybGQhIik7Cn0K