#include <iostream>
#include <utility>

void bar(int&) {std::cout << "int&" << std::endl;}
void bar(const int&) {std::cout << "const int&" << std::endl;}
void bar(int&&) {std::cout << "int&&" << std::endl;}

template <typename... Args>
void foo(Args&&... args)
{
	return bar(std::forward<Args>(args)...);
}

int main()
{
	int i = 0;
	const int ci = 0;
	
	foo(i);
	foo(ci);
	foo(5);
}