Подпись аргумента перемещения C++ не распространена
map
является std::unordered_map
, T
имеет конструктор перемещения.
void foo(const std::string& s, T&& t) {
map.insert(std::pair<std::string, T>(s, t));
}
T t;
foo("", std::move(t));
Почему этот код не вызывает template<class U, class V> std::pair(U&& a, V&& b)
?
Почему мы должны использовать std::move(t)
чтобы получить правильное поведение?
void foo(const std::string& s, T&& t) {
map.insert(std::pair<std::string, T>(s, std::move(t)));
}