История изменений
Исправление intelfx, (текущая версия) :
Да. Начиная с C++11 make_pair имеет прототип вида
pair<V1, V2> make_pair(T1&&, T2&&)
(где V1, V2 — это T1, T2 «после передачи по значению»), как T1 подставляется const unsigned&
, производится свёртка ссылок (T& && == T&) и в итоге ты передаёшь в make_pair аргумент типа const unsigned&
(а адреса у твоей переменной нет, потому что нет definition).
Когда ты делаешь каст, создаётся временная переменная с известным значением, как T1 подставляется unsigned&&
и в итоге ты передаёшь в make_pair ссылку на временный объект.
А до C++11 у make_pair прототип без ссылок, и туда всегда передаётся значение.
Исправление intelfx, :
Да. Начиная с C++11 make_pair имеет прототип вида
pair<V1, V2> make_pair(T1&&, T2&&)
(где V1, V2 — это T1, T2 «после передачи по значению»), как T1 подставляется const unsigned&
, производится свёртка ссылок (T& && == T&) и в итоге ты передаёшь в make_pair аргумент типа const unsigned&
(а адреса у твоей переменной нет).
Когда ты делаешь каст, создаётся временная переменная, как T1 подставляется unsigned&&
и в итоге ты передаёшь в make_pair ссылку на временный объект.
А до C++11 у make_pair прототип без ссылок, и туда всегда передаётся значение.
Исходная версия intelfx, :
Да. Начиная с C++11 make_pair имеет прототип вида
pair<V1, V2> make_pair(T1&&, T2&&)
(где V1, V2 — это T1, T2 «после передачи по значению»), как T1 подставляется const unsigned&
, производится свёртка ссылок (T& && == T&) и в итоге ты передаёшь в make_pair аргумент типа const unsigned&
(а адреса у твоей переменной нет).
Когда ты делаешь каст, создаётся временная переменная, как T1 подставляется unsigned&&
и в итоге ты передаёшь в make_pair ссылку на временный объект.
А до C++11 у make_pair прототип без ссылок.