#include <iostream>
// if you comment back in the code below you will see that the const int&&
// overload is preferred over int&& over const int&. when called with an rvalue
void f(const int& i)
{
std::cout << "const & : " << i;
}
/*
void f(int&& i)
{
std::cout << " && : " << i;
}
void f(const int&& i)
{
std::cout << "const && : " << i;
}
*/
int main()
{
f(3);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKLy8gaWYgeW91IGNvbW1lbnQgYmFjayBpbiB0aGUgY29kZSBiZWxvdyB5b3Ugd2lsbCBzZWUgdGhhdCB0aGUgY29uc3QgaW50JiYKLy8gb3ZlcmxvYWQgaXMgcHJlZmVycmVkIG92ZXIgaW50JiYgb3ZlciBjb25zdCBpbnQmLiB3aGVuIGNhbGxlZCB3aXRoIGFuIHJ2YWx1ZQoKdm9pZCBmKGNvbnN0IGludCYgaSkKewoJc3RkOjpjb3V0IDw8ICJjb25zdCAmIDogIiA8PCAgaTsKfQoKLyoKdm9pZCBmKGludCYmIGkpCnsKCXN0ZDo6Y291dCA8PCAiICYmIDogIiA8PCAgaTsKfQoKdm9pZCBmKGNvbnN0IGludCYmIGkpCnsKCXN0ZDo6Y291dCA8PCAiY29uc3QgJiYgOiAiIDw8ICBpOwp9CiovCmludCBtYWluKCkKewoJZigzKTsKfQ==