LINUX.ORG.RU

История изменений

Исправление 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 прототип без ссылок.