MSVC コンパイラには、既定の移動コンストラクタが作成されないという既知のバグがあります。
問題は、次のようなクラスがたくさんあることです。
struct User {
std::string FirstName;
std::string LastName;
std::string Address;
std::string PostalCode;
std::string City;
std::vector<std::unique_ptr<ProjectBase>> Projects;
};
このようなクラスを取得して、このシナリオで機能するものに変換するにはどうすればよいですか:
std::vector<std::unique_ptr<User>> users;
{
// I use this logic often (create a temporary object and move it into stl container
auto new_user=make_unique<User>();
users.push_back(std::move(new_a));
}
users.back()->FirstName="Should";
users.back()->LastName="Work";
std::cout << "First Name: " << users.back()->FirstName << std::endl;
上記のコードは Windows Phone 8 では動作しませんが (移動コンストラクターがないため)、Visual Studio 2012 (v110) ツールキットでは動作します。
Windows Phone 8 で動作するようにコンストラクターを移動すると、User クラスはどのようになりますか?