int hoge(int n) { return n; }
int hoge(const int n) { return n; }
int hoge(int &n) { return n; }
int hoge(const int &n) { return n; }
だと、2番目だけコンパイルできないんですけど、どうしてなんでしょうか。
呼び出すときに、結局intを丸ごとコピーして引数に渡すので、呼び出し元では
int であろうがconst int であろうが区別していないのでしょうか。