C ++ 0x T оператор + (const T &, T &&) шаблон, все еще нужно переместить?

Некоторое время назад мне сказали, что для обычного шаблона для реализации двухзначных операторов требуется последний ход в return.

Matrix operator+(const Matrix &a, Matrix &&b) {
    b += a;
    return std::move(b);
}

Но теперь есть особое правило, что в a return компилятор может рассматривать возвращаемое значение как временное, и тогда в этом не будет необходимости - достаточно простого return b .

Но опять же, ] b имеет в этой функции имя , следовательно, его LValue - что мешает компилятору m считать, что это временная функция, и ход .

Это все еще так в самой последней версии стандарта C ++ 0x? Нам нужен ход для реализации вышеуказанного шаблона?

7
задан R. Martinho Fernandes 24 August 2011 в 03:51
поделиться