Я немного слышал о проблеме ссылки на ссылку и это разрешение. Я не очень хорошо разбираюсь в терминологии Комитета С++, но я понимаю, что аннотация "Перемещено в DR" в ссылке означает, что это текущая интерпретация, которой должны придерживаться совместимые со стандартом компиляторы.
У меня есть этот пример кода, который я не могу понять:
template <typename T>
struct C {
void f(T&) { }
void f(const T&) { }
};
int main() {
C<int> x; // OK
C<int&> y; // compile error: f cannot be overloaded
C<const int&> z; // compile error: f cannot be overloaded
}
Я понимаю ошибку в случае C<const int&>
: используя правила из DR # 106, мы получаем два метода с одинаковой сигнатурой f (const int &). То, что я не получаю, это случай C<int&>
: не должен ли он генерировать точно такой же код, что и C<int>
(по крайней мере, согласно разрешению Страустрипа)?