#include <algorithm>
#include <iostream>
#include <vector>
struct A {
int val;
bool operator<(const A& other) const {
std::cout << "operator\n";
return val < other.val;
}
A() = default;
A(A&& a) : val(a.val) {
std::cout << "move ctor\n";
}
A &operator=(A&& a) {
val = a.val;
std::cout << "move assign\n";
}
};
void swap(A& a, A& b) {
std::cout << "foo\n";
std::swap(a.val, b.val);
}
int main()
{
std::vector<A> a(2);
a[0].val = 10;
a[1].val = -1;
std::sort(a.begin(), a.end());
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RydWN0IEEgewogICBpbnQgdmFsOwoKICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQSYgb3RoZXIpIGNvbnN0IHsKICAgICAgc3RkOjpjb3V0IDw8ICJvcGVyYXRvclxuIjsKICAgICAgcmV0dXJuIHZhbCA8IG90aGVyLnZhbDsKICAgfQoKICAgQSgpID0gZGVmYXVsdDsKICAgQShBJiYgYSkgOiB2YWwoYS52YWwpIHsKICAgICAgc3RkOjpjb3V0IDw8ICJtb3ZlIGN0b3JcbiI7CiAgIH0KICAgQSAmb3BlcmF0b3I9KEEmJiBhKSB7CiAgICAgIHZhbCA9IGEudmFsOwogICAgICBzdGQ6OmNvdXQgPDwgIm1vdmUgYXNzaWduXG4iOwogICB9Cn07Cgp2b2lkIHN3YXAoQSYgYSwgQSYgYikgewogICBzdGQ6OmNvdXQgPDwgImZvb1xuIjsKICAgc3RkOjpzd2FwKGEudmFsLCBiLnZhbCk7Cn0KCmludCBtYWluKCkKewogICBzdGQ6OnZlY3RvcjxBPiBhKDIpOwogICBhWzBdLnZhbCA9IDEwOwogICBhWzFdLnZhbCA9IC0xOwoKICAgc3RkOjpzb3J0KGEuYmVnaW4oKSwgYS5lbmQoKSk7Cn0=