I don't know about the last two use cases, I think it's ok and expected if `limit`... limits (i.e. it can only lower the limit and not raise it). And it should still be possible to specify a chunk size that is lower than the limit somehow, which cannot work if `limit` always adjusts `m_nret`.

But you are definitely right about the zero case (note that the `if` statement in the `empty` method also needs to be adjusted to cope with `m_limit == 0`.