#include <iostream>
#include <string>
#include <utility>
template<class T>
struct C {
void insert(const T&) { std::cout << "const T&" << std::endl; }
//void insert(T&&) { std::cout << "T&&" << std::endl; }
template<class P>
void insert(P&&) { std::cout << "P&&" << std::endl; }
};
int main()
{
C<std::pair<std::string, int>> v;
v.insert(std::make_pair("1st", 1));
v.insert(std::pair<std::string, int>("2nd", 2));
std::pair<std::string, int> p1{"3rd", 3};
v.insert(p1);
const std::pair<std::string, int> p2{"4th", 4};
v.insert(p2);
v.insert({"5th", 5});
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dXRpbGl0eT4KCnRlbXBsYXRlPGNsYXNzIFQ+CnN0cnVjdCBDIHsKICB2b2lkIGluc2VydChjb25zdCBUJikgeyBzdGQ6OmNvdXQgPDwgImNvbnN0IFQmIiA8PCBzdGQ6OmVuZGw7IH0KICAvL3ZvaWQgaW5zZXJ0KFQmJikgeyBzdGQ6OmNvdXQgPDwgIlQmJiIgPDwgc3RkOjplbmRsOyB9CiAgdGVtcGxhdGU8Y2xhc3MgUD4KICB2b2lkIGluc2VydChQJiYpIHsgc3RkOjpjb3V0IDw8ICJQJiYiIDw8IHN0ZDo6ZW5kbDsgfQp9OwoKaW50IG1haW4oKQp7CiAgICBDPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgaW50Pj4gdjsKCiAgICB2Lmluc2VydChzdGQ6Om1ha2VfcGFpcigiMXN0IiwgMSkpOwoKICAgIHYuaW5zZXJ0KHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgaW50PigiMm5kIiwgMikpOwoKICAgIHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgaW50PiBwMXsiM3JkIiwgM307CiAgICB2Lmluc2VydChwMSk7CgogICAgY29uc3Qgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBpbnQ+IHAyeyI0dGgiLCA0fTsKICAgIHYuaW5zZXJ0KHAyKTsKCiAgICB2Lmluc2VydCh7IjV0aCIsIDV9KTsKfQo=