end()
возвращает копию последнего итератора, верно?list.end()
это значение, верно?Так как же получается
std::list<int> lst;
// ...
--l.end();`
компилировать?
Как правильно указано, мой третий пункт не обязательно прав. Но тогда как насчет этого кода, который также компилируется?
struct A{};
void f(A&)
{
}
A a()
{
return A();
}
int main()
{
f(a());
}
- — оператор-функция, перегруженная для итератора списка, принимает неконстантную ссылку, верно?
Этот пункт неверен. operator--
является функцией-членом, и функция-член может быть вызвана временно. Вы не передаете объект этой функции-члену в качестве аргумента. таким образом, вопрос о привязке значения к неконстантной ссылке не возникает в первую очередь.
Что касается редактирования (прохождение Rvalue в f(A&){}
), это нестандартное расширение. я Угадай вы используете компилятор Microsoft, потому что я знаю, что у него нестандартное расширение, что, на мой взгляд, глупо.
Других решений пока нет …