On Sat, Oct 8, 2022 at 5:58 PM Jason McKesson wrote:
On Sat, Oct 8, 2022 at 5:46 PM Frederick Virchanza Gotham wrote:
> [...] left it as non-const though, because I didn't want someone to be able to do
> the following:
>     short unsigned k = 7u;
>     Func(k);
> I didn't want the implicit conversion from rvalue to "reference to const".

FWIW, I think the status quo is fine (and you've now seen at least one, maybe two ways of dealing with the problem if you really need to). But as a data point / fun story, this came up in somebody (else)'s C++ Pub Quiz recently (maybe CppNorth? I forget the details), and was discussed briefly on the cpplang Slack.

void f(int&&) { puts("int"); }
void f(double&&) { puts("double"); }

int main() {
int i = 1;
double d = 2;
f(i); // prints "double"
f(d); // prints "int"

Completely unsurprising, when you think about how this overload set needs to work:

void f(const char *&) { puts("pointer"); }
void f(std::string&&) { puts("string"); }

int main() {
const char *p = "hello";
f(p); // prints "string"