Возможно, я глуп, но я не понимаю, в чем проблема с этим кодом. Я начинаю прибегать к сомнению своих инструментов. Я использую Clang (C++ 11) и его libC++. Если это моя вина, я извиняюсь, и спасибо заранее, кто указывает мою тупость, но если это не так, может быть, это более глубокий вопрос ..Объявление типов шаблонов для вызова make_pair
std::map<int, bool> map_;
map_.insert(std::make_pair<int, bool>(5, true)); //Use a literal, compiles OK
int x = 5;
map_.insert(std::make_pair<int, bool>(x, true)); //Use a local of same type, compile error: 'no known conversion from 'int' to 'int &&' for 1st argument'
Вы не должны предоставлять аргументы шаблона, но пусть дедукции делать свою работу: 'станд :: make_pair (х, правда) ' – juanchopanza
' std :: make_pair' обычно принимает это и дает ему тип 'int & &&' или 'int &'. Теперь вы ушли и сделали это 'int &&', который нельзя использовать с lvalue. – chris
Да, это исправляет. Но мне интересно, почему .. принудительное использование версии шаблона функции, которая соответствует аргументам, должна давать ту же реализацию, конечно? – NitrousUK