派生クラス用に作成されていないデフォルトの移動コンストラクタまたは代入演算子があるのはなぜですか? 私が何を意味するかを示すために。このセットアップコードを持つ:
#include <utility>
struct A
{
A () { }
A (A&&) { throw 0; }
A& operator= (A&&) { throw 0; }
};
struct B : A
{ };
次の行のいずれかがスローされます。
A x (std::move (A ());
A x; x = A ();
ただし、次のいずれも行いません。
B x (std::move (B ());
B x; x = B ();
念のため、GCC 4.4 でテストしました。
編集: GCC 4.5 での後のテストでは、同じ動作が示されました。