#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);
}