Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > r-value references и ошибка референса


Автор: boostcoder 5.12.2011, 21:16
всем привет.

собираю некоторые исходники на основе autoconf. там есть проверка на поддержку компилятором C++11 фишек.
Код

template <typename T>
struct check
{
   static_assert(sizeof(int) <= sizeof(T), "not big enough");
};

typedef check<check<bool>> right_angle_brackets;

int a;
decltype(a) b;

typedef check<int> check_type;
check_type c;
check_type&& cr = c; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

int main ()
{
   return 0;
}


http://liveworkspace.org/code/d16bd0e243617346bbba44adb28a9274
на отмеченную строку ругается так:
Цитата

error: invalid initialization of reference of type 'check_type&& {aka check<int>&&}' from expression of type 'check_type {aka check<int>}'

скажите, тест правильный? этот код должен работать?
мне он кажется совершенно правильным.

спасибо.

Автор: bsa 5.12.2011, 21:20
А разве c это rvalue?!? Понимаешь, если бы такое было возможно, то семантика перемещения развалилась бы моментально. Так как соответствующий конструктор мог быть применен не к тому...

Автор: boostcoder 5.12.2011, 21:24
bsa, не понял аргументацию.

Автор: baldina 6.12.2011, 01:13
c - не временная переменная. другое дело так:
Код

typedef check<int> check_type;
check_type&& cr = check_type(); 

хорошо бы стандарт глянуть, но нет под рукой

Автор: baldina 6.12.2011, 01:28
поглядел стандарт. требуется явное преобразование.
Код

check_type&& cr = static_cast<check_type&&>(c);

Автор: boostcoder 6.12.2011, 05:00
baldina, спасибо. требуется еще одно мнение чтоб патч коммитить.

Автор: baldina 6.12.2011, 11:43
патч для autoconf?

Автор: boostcoder 6.12.2011, 12:49
да.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)