Named Rvalues Are Lvalues

#include <cstdio>
#include <string>
#include <utility>

void sink(const std::string&) { std::puts("lvalue"); }
void sink(std::string&&)      { std::puts("rvalue"); }

template <class T>
void relay(T&& x) { sink(x); }

int main() {
    std::string s = "hello";
    relay(s);                       // (1)
    relay(std::string("world"));    // (2)
}

What does this print?

A

It fails to compile: sink(x) is ambiguous when T deduces to std::string&.

B
lvalue
lvalue
C
lvalue
rvalue
D
rvalue
rvalue