#include <algorithm>
#include <memory>
#include <vector>
#include <iostream>
struct Boo {
int val;
explicit Boo(const int val) : val(val) {}
};
int main() {
std::vector<std::shared_ptr<Boo>> vec;
vec.push_back(std::make_shared<Boo>(1));
vec.push_back(std::make_shared<Boo>(2));
vec.push_back(std::make_shared<Boo>(3));
auto min1 = std::min_element(vec.begin(), vec.end(), [](auto& x, auto& y) { return x->val < y->val; });
auto min2 = *std::min_element(vec.begin(), vec.end(), [](auto& x, auto& y) { return x->val < y->val; });
std::cout << typeid(min1).name() << "\n" << typeid(min2).name();
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEJvbyB7CglpbnQgdmFsOwoJZXhwbGljaXQgQm9vKGNvbnN0IGludCB2YWwpIDogdmFsKHZhbCkge30KfTsKCgppbnQgbWFpbigpIHsKCXN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxCb28+PiB2ZWM7Cgl2ZWMucHVzaF9iYWNrKHN0ZDo6bWFrZV9zaGFyZWQ8Qm9vPigxKSk7Cgl2ZWMucHVzaF9iYWNrKHN0ZDo6bWFrZV9zaGFyZWQ8Qm9vPigyKSk7Cgl2ZWMucHVzaF9iYWNrKHN0ZDo6bWFrZV9zaGFyZWQ8Qm9vPigzKSk7CglhdXRvIG1pbjEgPSBzdGQ6Om1pbl9lbGVtZW50KHZlYy5iZWdpbigpLCB2ZWMuZW5kKCksIFtdKGF1dG8mIHgsIGF1dG8mIHkpIHsgcmV0dXJuIHgtPnZhbCA8IHktPnZhbDsgfSk7CglhdXRvIG1pbjIgPSAqc3RkOjptaW5fZWxlbWVudCh2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpLCBbXShhdXRvJiB4LCBhdXRvJiB5KSB7IHJldHVybiB4LT52YWwgPCB5LT52YWw7IH0pOwoJc3RkOjpjb3V0IDw8IHR5cGVpZChtaW4xKS5uYW1lKCkgPDwgIlxuIiA8PCB0eXBlaWQobWluMikubmFtZSgpOwoJcmV0dXJuIDA7Cn0=