void func(const int &) { std::cout << "c lv ref\n"; }
void func(int &&) { std::cout << "rv ref\n"; }
func(1);
Поскольку константная ссылка Lvalue способен принимать все типы данных (сопзИте и не- lval, сопзИте и не- RValue), интересно, что является гарантия того, что приведенный выше код будет печатать «rv ref». Является ли он стандартизованным или зависит от компилятора?перегруженных функции приоритета (ссылки)
спасибо! Теперь все ясно – Criss
Нет, это не то, как это работает. В обоих случаях есть ICS (если вы не можете создать ICS, функция не является жизнеспособной), и оба являются преобразованием идентичности. Это контролируется тай-брейкером в [\ [over.ics.rank \] /3.2.3] (https://timsong-cpp.github.io/cppwp/over.ics.rank#3.2.3). –
@ T.C. Я не понимал этот стандарт. Извинения за распространение дезинформации - я отредактировал вопрос, надеясь сделать его правильным. –