Подпись аргумента перемещения 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)));
}

0 ответов

Другие вопросы по тегам