- list's
end()
は、past-the-end イテレータのコピーを返しますよね? - したがって、
list.end()
右辺値ですか? - -- list iterator にオーバーロードされた operator-function は非 const 参照を取りますよね?
- 右辺値を非 const 参照にバインドすることはできませんよね?
では、どうして
std::list<int> lst;
// ...
--l.end();`
コンパイル?
正しく指摘されたように、私の 3 番目のポイントは必ずしも正しくありません。しかし、コンパイルもできるこのコードはどうでしょうか?
struct A{};
void f(A&)
{
}
A a()
{
return A();
}
int main()
{
f(a());
}