Я получал странную ошибку от gcc и не могу понять, почему. Я сделал следующий примерный код, чтобы сделать проблему более ясной. В принципе, существует определенный класс, для которого я делаю его конструктором копирования и оператором присваивания копии частным, чтобы случайно вызвать их.
#include <vector>
#include <cstdio>
using std::vector;
class branch
{
public:
int th;
private:
branch( const branch& other );
const branch& operator=( const branch& other );
public:
branch() : th(0) {}
branch( branch&& other )
{
printf( "called! other.th=%d\n", other.th );
}
const branch& operator=( branch&& other )
{
printf( "called! other.th=%d\n", other.th );
return (*this);
}
};
int main()
{
vector<branch> v;
branch a;
v.push_back( std::move(a) );
return 0;
}
Я ожидаю, что этот код будет компилироваться, но он не работает с gcc. На самом деле gcc жалуется, что "branch:: branch (const branch &) является частной", что, как я понимаю, не следует вызывать.
Оператор присваивания работает, так как если я заменил тело main() на
branch a;
branch b;
b = a;
Он будет компилироваться и выполняться как ожидалось.
Это правильное поведение gcc? Если да, то что не так с вышеуказанным кодом? Любое предложение полезно для меня. Спасибо!