Может ли RVALUE определенного типа класса быть автоматически подняться на себя?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Может ли RVALUE определенного типа класса быть автоматически подняться на себя?

Сообщение Anonymous »

В C ++ функция с подписью void f (a & a) (не T-Template) связывается только с lvalue.
может ли RValue автоматически поднять себя в lvalue?

Код: Выделить всё

#include 
#include 

struct A {
operator A&() && {
return *this;
}
void mutate() {...}
};
< /code>
Это создает предупреждение компилятора, «преобразование» в ссылку на тот же тип никогда не будет использовать преобразование типа ». Но, по крайней мере, оператор составлен и работает, за исключением того, что его необходимо явно вызвать с полным.void f(A& a) { a.mutate(); }

A make_A() { return A{}; }

int main() {
A a;

f(a);  // ok
f(make_A().operator A&());  // ok
f(make_A());  // does not compile, implicit conversion to A& doesn't work
f(std::move(a));  // does not compile
}
https://godbolt.org/z/okm8n5z1e
Аналогичный вопрос был задан перед переходом в LVALUE? Это показывает, как это сделать. В моем случае я хочу включить это, но только для определенного класса.
Есть ли улов или обход>

Подробнее здесь: https://stackoverflow.com/questions/797 ... lue-of-its
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»