I am primarily trying to understand the uses that this feature enables or facilitates. I understand which calls go where in the following:
struct Foo
{
void bar() & {std::cout << "l-value"; }
void bar() && {std::cout << "r-value"; }
};
Foo f;
f.bar(); // calls l-value version
Foo().bar(); // call r-value version
But what is the practical use of such a distinction?