#include <set>
#include <memory>
int main() {
//attempt 1
struct Comp1{
bool operator()(const std::unique_ptr<int> &lhs, const std::unique_ptr<int> &rhs) const{
return *lhs < *rhs;
};
bool operator()(int lhs, const std::unique_ptr<int> &rhs) const{
return lhs < *rhs;
};
bool operator()(const std::unique_ptr<int> &lhs, int rhs) const{
return *lhs < rhs;
};
typedef void is_transparent;
};
std::set<std::unique_ptr<int>, Comp1> s1;
s1.count(42); //this should check if a unique_ptr<int> with value 42 exists
//in s1 without constructing it
//attempt 2
struct Wrapper{
Wrapper(const int &i) : i(&i){}
Wrapper(const std::unique_ptr<int> &ip) : i(ip.get()){}
const int *i;
};
struct Comp2{
bool operator()(Wrapper lhs, Wrapper rhs) const{
return *lhs.i < *rhs.i;
};
typedef void is_transparent;
};
std::set<std::unique_ptr<int>, Comp2> s2;
s2.count(42); //this should check if a unique_ptr<int> with value 42 exists
//in s2 without constructing it
}
I2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPG1lbW9yeT4KIAppbnQgbWFpbigpIHsKCS8vYXR0ZW1wdCAxCglzdHJ1Y3QgQ29tcDF7CgkJYm9vbCBvcGVyYXRvcigpKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxpbnQ+ICZsaHMsIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxpbnQ+ICZyaHMpIGNvbnN0ewoJCQlyZXR1cm4gKmxocyA8ICpyaHM7CgkJfTsKCQlib29sIG9wZXJhdG9yKCkoaW50IGxocywgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPGludD4gJnJocykgY29uc3R7CgkJCXJldHVybiBsaHMgPCAqcmhzOwoJCX07CgkJYm9vbCBvcGVyYXRvcigpKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxpbnQ+ICZsaHMsIGludCByaHMpIGNvbnN0ewoJCQlyZXR1cm4gKmxocyA8IHJoczsKCQl9OwoJCXR5cGVkZWYgdm9pZCBpc190cmFuc3BhcmVudDsKCX07CglzdGQ6OnNldDxzdGQ6OnVuaXF1ZV9wdHI8aW50PiwJQ29tcDE+IHMxOwoJczEuY291bnQoNDIpOyAvL3RoaXMgc2hvdWxkIGNoZWNrIGlmIGEgdW5pcXVlX3B0cjxpbnQ+IHdpdGggdmFsdWUgNDIgZXhpc3RzCgkgICAgICAgICAgICAgIC8vaW4gczEgd2l0aG91dCBjb25zdHJ1Y3RpbmcgaXQKIAoJLy9hdHRlbXB0IDIKCXN0cnVjdCBXcmFwcGVyewoJCVdyYXBwZXIoY29uc3QgaW50ICZpKSA6IGkoJmkpe30KCQlXcmFwcGVyKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxpbnQ+ICZpcCkgOiBpKGlwLmdldCgpKXt9CgkJY29uc3QgaW50ICppOwoJfTsKCXN0cnVjdCBDb21wMnsKCQlib29sIG9wZXJhdG9yKCkoV3JhcHBlciBsaHMsIFdyYXBwZXIgcmhzKSBjb25zdHsKCQkJcmV0dXJuICpsaHMuaSA8ICpyaHMuaTsKCQl9OwoJCXR5cGVkZWYgdm9pZCBpc190cmFuc3BhcmVudDsKCX07CglzdGQ6OnNldDxzdGQ6OnVuaXF1ZV9wdHI8aW50PiwJQ29tcDI+IHMyOwoJczIuY291bnQoNDIpOyAvL3RoaXMgc2hvdWxkIGNoZWNrIGlmIGEgdW5pcXVlX3B0cjxpbnQ+IHdpdGggdmFsdWUgNDIgZXhpc3RzCgkgICAgICAgICAgICAgIC8vaW4gczIgd2l0aG91dCBjb25zdHJ1Y3RpbmcgaXQKfQ==