C ++ 11 make_pair с указанными параметрами шаблона не компилируется

Я просто играл с g ++ 4.7 (одним из последних снимков) с включенной опцией -std = c ++ 11. Я попытался скомпилировать часть моей существующей кодовой базы, и один случай, который потерпел неудачу, несколько смутил меня.

Буду признателен, если кто-нибудь сможет объяснить, что происходит.

Вот код

#include <utility>
#include <iostream>
#include <vector>
#include <string>

int main ( )
{
    std::string s = "abc";

    // 1 ok
    std::pair < std::string, int > a = std::make_pair ( s, 7 );

    // 2 error on the next line
    std::pair < std::string, int > b = std::make_pair < std::string, int > ( s, 7 );

    // 3 ok
    std::pair < std::string, int > d = std::pair < std::string, int > ( s, 7 );

    return 0;
}

Я понимаю, что make_pairимел ввиду для использования в случае (1) (если я укажу типы, то я мог бы также использовать (3)), но я не понимаю, почему в этом случае происходит сбой.

Точная ошибка:

test.cpp: В функции 'int main ()': test.cpp: 11: 83: ошибка: нет соответствующей функции для вызова 'make_pair (std :: string &, int)' test.cpp: 11: 83: note: кандидат: В файле, включенном в /gcc4.7/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.0/../../../../include/c++/4.7. 0 / utility: 72: 0, из test.cpp: 1: /gcc4.7/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.0/../../../. ./include/c++/4.7.0/bits/stl_pair.h:274:5: примечание: шаблон constexpr std :: pair :: __ type, имя типа std :: __ decay_and_strip <_T2> :: __ type> std :: make_pair (_T1 && , _T2 &&) /gcc4.7/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.0/../../../../include/c++/4.7.0/bits/ stl_pair.h: 274: 5: примечание: ошибка вывода / замены аргумента шаблона: test.cpp: 11: 83: примечание: невозможно преобразовать 's' (тип 'std :: string {aka std :: basic_string}') в тип 'станд :: basic_string &&'

Опять же, вопрос здесь просто "что происходит?" Я знаю, что могу решить эту проблему, удалив спецификацию шаблона, но я просто хочу знать, что здесь не так под обложками. Заранее спасибо.

РЕДАКТИРОВАТЬ:

G ++ 4.4 компилирует этот код без проблем.Удаление -std = c ++ 11 также компилируется с кодом без проблем.

Ответы на вопрос(1)

Ваш ответ на вопрос