g ++ 4.4: семантика перемещения iostream - PullRequest
1 голос
/ 21 марта 2012

Я пытался создать конструктор перемещения для класса, который агрегирует ostringstream. Тем не менее, я продолжаю сталкиваться с

/usr/include/c++/4.4.5/bits/ios_base.h:790: error: 
  ‘std::ios_base::ios_base(const std::ios_base&)’ is private

Это самый простой код, который я мог придумать

struct C {
    C(){ s << "start! "; }
    C(C&& c): s( std::move(c.s) ){ s << " moved "; }
    std::ostringstream s;
private:
    C(const C&);
};

C f() { return C(); }

int main(){
    C c=f();
    c.s << "aha";
    std::cout << c.s.str() << std::endl;
}

Предназначена ли библиотека iostreams для реализации семантики перемещения? Или это просто g ++ 4.4.5, который их пока не поддерживает?

1 Ответ

3 голосов
/ 21 марта 2012

iostreams являются подвижными, но только если у вас есть поддержка C ++ 11. Gcc 4.4, вероятно, недостаточно для этого.

Частный конструктор копирования базового класса предназначен именно для того, чтобы сделать классы не копируемыми (но, возможно, подвижными).

...