Я думал, что во время перегрузки компилятор проверяет, являются ли формальные аргументы одного и того же типа. Например:
void a(int x)
void a(double x)
может перегружаться просто потому, что два "х" имеют тип разности.
Однако существуют ли следующие два типа:
void f(int y)
void f(int& y)
Я понимаю, что это PBV и другой PBR. Но второй у имеет тип "int", а также правильно? Почему он успешно компилируется?
P.S. Я замечаю, что, хотя он компилируется, он не работает, хотя и сообщает ошибку времени выполнения неоднозначности.