#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+CnN0cnVjdCBDIHsKICB2b2lkIGluc2VydChjb25zdCBUJikgeyBzdGQ6OmNvdXQgPDwgImNvbnN0IFQmIiA8PCBzdGQ6OmVuZGw7IH0KICB2b2lkIGluc2VydChUJiYpIHsgc3RkOjpjb3V0IDw8ICJUJiYiIDw8IHN0ZDo6ZW5kbDsgfQogIHRlbXBsYXRlPGNsYXNzIFA+CiAgdm9pZCBpbnNlcnQoUCYmKSB7IHN0ZDo6Y291dCA8PCAiUCYmIiA8PCBzdGQ6OmVuZGw7IH0KfTsKCmludCBtYWluKCkKewogICAgQzxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGludD4+IHY7CgogICAgdi5pbnNlcnQoc3RkOjptYWtlX3BhaXIoIjFzdCIsIDEpKTsKCiAgICB2Lmluc2VydChzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGludD4oIjJuZCIsIDIpKTsKCiAgICBzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGludD4gcDF7IjNyZCIsIDN9OwogICAgdi5pbnNlcnQocDEpOwoKICAgIGNvbnN0IHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgaW50PiBwMnsiNHRoIiwgNH07CiAgICB2Lmluc2VydChwMik7CgogICAgdi5pbnNlcnQoeyI1dGgiLCA1fSk7Cn0K