fork download
  1. #include <set>
  2. #include <memory>
  3.  
  4. int main() {
  5. //attempt 1
  6. struct Comp1{
  7. bool operator()(const std::unique_ptr<int> &lhs, const std::unique_ptr<int> &rhs) const{
  8. return *lhs < *rhs;
  9. };
  10. bool operator()(int lhs, const std::unique_ptr<int> &rhs) const{
  11. return lhs < *rhs;
  12. };
  13. bool operator()(const std::unique_ptr<int> &lhs, int rhs) const{
  14. return *lhs < rhs;
  15. };
  16. typedef void is_transparent;
  17. };
  18. std::set<std::unique_ptr<int>, Comp1> s1;
  19. s1.count(42); //this should check if a unique_ptr<int> with value 42 exists
  20. //in s1 without constructing it
  21.  
  22. //attempt 2
  23. struct Wrapper{
  24. Wrapper(const int &i) : i(&i){}
  25. Wrapper(const std::unique_ptr<int> &ip) : i(ip.get()){}
  26. const int *i;
  27. };
  28. struct Comp2{
  29. bool operator()(Wrapper lhs, Wrapper rhs) const{
  30. return *lhs.i < *rhs.i;
  31. };
  32. typedef void is_transparent;
  33. };
  34. std::set<std::unique_ptr<int>, Comp2> s2;
  35. s2.count(42); //this should check if a unique_ptr<int> with value 42 exists
  36. //in s2 without constructing it
  37. }
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
Standard output is empty