fの呼び出しがあいまいな理由がわかりません:/ 3つの宣言は問題ないことはわかっていますが、この場合は機能しません。
#include <iostream>
using namespace std;
void f(int);
void f(int &);
void f(const int &);
void f(int a);
void f(int &a);
void f(const int &a);
int main()
{
int i=1;
const int ic=2;
int &ri=i;
const int & rc=ic;
f(i);
f(ic);
f(ri);
f(rc);
return 0;
}