如何复制现有对象并将副本转换为单个表达式中的右值引用

How copy existing object and cast the copy into r-value reference in a single expression

是否有一种快速且富有表现力的方法来复制现有对象并将其传递给右值引用?我有一个现有的 API,它将 r 值引用作为参数。但是由于向后兼容性,我不能更改它,也不能因为它已经有大量的过载而使它过载。比如foo就是我现有的API.:

void foo(int&& n)
{
    do_something(std::forward<int>(n));
}


int main()
{
    int n = get_value();

    // foo(n); // Doesn't work. Passing value into rvalue reference
    int n_ = n;
    foo(std::move(n)) // Works but ugly.

    foo(std::make_copy_and_move_said_copy(n));
    
    other_function(n);
}

有没有办法实现make_copy_and_move_said_copy?还是语言上不可能。

你可以这样复制:

foo(+n);

或者这个:

foo(int(n));

或者像这样更通用的方式:

foo(decltype(n)(n));