Why does the inner forwarding wrapper below fail to perfectly forward, collapsing every argument to an lvalue regardless of how `outer` was called?
template <typename T>
void sink(T&&);
template <typename... Args>
void outer(Args&&... args) {
auto inner = [&](auto&&... xs) {
(sink(std::forward<Args>(xs)), ...);
};
inner(std::forward<Args>(args)...);
}