Skip to content

[libc++] Fix std::forward for r-value references

The explicit cast is necessary even though the value for t is passed in as an r-value, because it becomes an l-value as soon as it is assigned to the variable.

Without the change in libc++ the updated test fails with:

In file included from tests/stl/stl_utility.cpp:1:
share/libc++/utility:58:12: error: rvalue reference to type 'int' cannot bind to lvalue of type 'typename remove_reference<int>::type' (aka 'int')
    return t;
           ^
tests/stl/stl_utility.cpp:18:20: note: in instantiation of function template specialization 'std::forward<int>' requested here
  int && xr = std::forward<int>(x + 1);
                   ^
code generation aborted due to one compilation error

The change follows the implementation in LLVM libcxx: https://github.com/llvm/llvm-project/blob/abfa950d86da1737/libcxx/include/__utility/forward.h#L35

Merge request reports