|
Boost : |
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2008-07-25 19:52:37
AMDG
Mathias Gaunard wrote:
> Giovanni Piero Deretta wrote:
>
>> I think that the biggest problem is that, if T is movable, you cannot
>> statically guarantee that T is never accessed in an empty state, so
>> the never empty guarantee is not as useful.
>>
>
> You can only move from rvalues.
> Rvalues cannot be accessed later on.
>
> If they're not real rvalues, that means casting was used. Which should
> then make it explicit that trying to access it later on is undefined
> behaviour as far as the implementation of the type is concerned.
>
Such a move would be much too limiting.
Consider how std::remove would be implemented (untested):
template<class Iter, class T>
Iter remove(Iter begin, Iter end, const T& value) {
begin = std::find(begin, end, value);
Iter write_pos = begin++;
for(; begin != end; ++begin) {
if(*begin != value) {
*write_pos++ = std::move(*begin);
}
}
return(write_pos);
}
In Christ,
Steven Watanabe
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk