Пример свертывания ссылки на rvalue с помощью & & & && - PullRequest
2 голосов
/ 05 февраля 2020

Если у вас есть шаблоны и ссылки, вы можете получить такие типы, как T & &&, которые сворачиваются в соответствии с некоторыми правилами . По сути, все сворачивается до T&, за исключением T && &&, который сворачивается до T&&

Что является реальным примером, когда срабатывает случай && &&?

Я нашел один искусственный пример :

template <typename T> void func(T&& a);
auto fp = func<int&&>;

Но в моих исследованиях до сих пор я не понимал, когда этот случай реально возникает.

1 Ответ

3 голосов
/ 05 февраля 2020

Пересылка, когда тип параметра является неограниченным auto будет реальным примером. Например, в лямбде.

[](auto && arg) {
    return foobar(std::forward<decltype(arg)>(arg));
}

decltype(arg) будет некоторым значением T&&, когда лямбда вызывается с r-значением. Правила свертывания ссылок в конечном итоге включат реализацию std::forward и превратят T && && в T&& для возвращаемого типа.

...