Почему VS не может связать rvalue ссылку на указатель? - PullRequest
0 голосов
/ 30 июня 2018

Рассмотрим следующий пример (в гипотетических целях):

#include <iostream>

void f(int *&&b)
{
    ++b;
    std::cout << *b;
}

int main()
{
    int a[] = { 1,2,3,4 };
    f(a);
}

По моему скромному пониманию, массив a распадается на int *, который является временным и, следовательно, значением, и int *&&b должен счастливо с ним связываться и продлевать свой срок действия для объема функции f , И это то, что происходит, если я запускаю это с C ++ 14 (gcc 6.3) и получается 2. Однако в VS2017 я получаю сообщение об ошибке:

Ошибка C2664 «void f (int * &&)»: невозможно преобразовать аргумент 1 из «int» [4] 'до' int * && '

Если я использую std::move для принудительной установки значения xvalue f(std::move(a));, это также работает в VS. Нужно ли использовать std::move в этом случае или это какая-то ошибка в VS?

...