Есть структура с unique_ptr.
struct S
{
S() = default;
S(const S&) = delete;
S(S&& src) :
p(std::move(src.p))
{
}
std::unique_ptr<int> p;
}
есть вектор типа
std::vector<S> v;
код
for(auto p = v.begin(); p!= v.end(); ++p) {...}
компилиться, а код:
for(auto p : v)
не компилиться — ему надо копи конструктор:
error: use of deleted function ‘S::S(const S&)
можно ли его как-то реализовать? Может сделать так:
S::S(const S& src) { p.reset(src.p) }
?
Здравствуйте, Cruser, Вы писали:
C> Есть структура с unique_ptr.
хъ
C>есть вектор типа
C>C>std::vector<S> v;
C>
C>код:
C>C>for(auto p : v)
C>
C>не компилиться — ему надо копи конструктор:
Попробуй помочь компилятору:
for(auto & p : v)
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Попробуй помочь компилятору:
SVZ>SVZ>for(auto & p : v)
SVZ>
Как другой вариант — заставить компилятор использовать именно тот тип, что возвращается функцией
for(decltype(auto) p : v)
Хотя в случае разыменования правильного итератора преимуществ нет, там всегда ссылка.
Разве что с decltype(auto) будет работать и для deprecated специализации vector<bool>, где разыменование итератора возвращает не ссылку.