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&) is private」と不平を言っていますが、これは私が理解しているように、呼び出されるべきではありません。
main() の本体を次のように置き換えると、代入演算子が機能します。
branch a;
branch b;
b = a;
期待どおりにコンパイルおよび実行されます。
これは gcc の正しい動作ですか? もしそうなら、上記のコードの何が問題になっていますか? どんな提案も私にとって役に立ちます。ありがとうございました!