似乎 VC11 Update 2 在将unique_ptr
' 推入 std::vector 时需要移动构造函数。这是记录在案的行为还是已知的错误?
#include < iostream>
#include <memory>
#include <vector>
struct TEST
{
std::unique_ptr<int> m_l;
TEST(
std::unique_ptr<int>&& l)
{
m_l = std::move(l);
};
//Move Contructor for Test
TEST(TEST&& o)
{
m_l = std::move(o.m_l);
}
};
void Bar()
{
std::vector<TEST> vec;
std::unique_ptr<int> a(new int);
//Compiles fine without a Move Constructor
TEST(std::move(a));
//Requires a Move Contructor to compile
vec.push_back(
TEST(std::move(a)));
}
int main()
{
Bar();
return 0;
}
笔记
我在IDEONE C++11上尝试了上面的代码,没有移动构造函数,它编译得很好。