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:

Merge request reports