Учитывая std::vector<std::unique_ptr<SomeType> >
, законно ли использовать remove_if
на нем?Другими словами, учитывая этот код:
std::vector<std::unique_ptr<SomeType> > v;
// fill v, all entries point to a valid instance of SomeType...
v.erase( std::remove_if( v.begin(), v.end(), someCondition ), v.end() );
, я гарантированно после стирания, что все указатели все еще в v
действительны.Я знаю, что с учетом интуитивной реализации std::remove_if
и с учетом всех реализаций, на которые я смотрел, они будут.Я хотел бы знать, есть ли в стандарте что-нибудь, что гарантирует это;то есть std::remove_if
не разрешается копировать любые действительные записи без повторного копирования копии в ее окончательное местоположение.
(Я, конечно, предполагаю, что условие не копируется. Если условие имеет сигнатуру типа:
struct Condition
{
bool operator()( std::unique_ptr<SomeType> ptr ) const;
};
, то, конечно, все указатели будутнедействительно после remove_if
.)