#include <utility>
struct A {};
void fn(A&);
void f()
{
fn(std::move(A()));
}
上記のようなコードを書いたところ、以下の警告が出た。(コンパイラは VS2012)
warning C4239: nonstandard extension used : 'initializing' : conversion from 'A' to 'A &'
A non-const reference may only be bound to an lvalue
C4239 は、以下。(2023/4/18 現在)
理由は引数の型が non-const reference
であるのに、std::move で rvalue を渡そうとしているため。
rvalue を渡しているのだから関数の引数の型を A&& にしてやるのが良い。