Marmalade SDK是一个跨编译器的跨平台框架,允许用户从Windows开发Iphone应用程序.Marmalade有一个交叉编译器,能够直接从本地Windows计算机生成有效的签名IPA,而无需Mac或远程构建服务.我知道一些能够交叉编译应用程序的"开放式工具链",但这些工具链与Iphone许可不兼容.任何人都知道Marmalade的交叉编译器是如何工作的?marmalade是如何开发出与Iphone SDK许可兼容的交叉编译器的?他们用什么编译器进行交叉编译?他们使用开源编译器并对其进行定制吗?它们如何与兼容Iphone许可的"便携式OS-wrapper"链接?
请考虑以下代码:
class Outer
{
class Inner
{
public:
Inner(Inner&& i):outers(std::move(i.outers)),test(std::move(test))
{}
void addOuter(const Outer& o) {outers.push_back(std::move(o));}
private:
std::vector<Outer> outers;
std::unique_ptr<std::string> test;
};
public:
Outer(Outer&& o):inners(std::move(o.inners))
{}
private:
std::vector<Inner> inners;
};
Run Code Online (Sandbox Code Playgroud)
当我尝试在Visual Studio 2012上编译上面的代码时,我收到以下错误:
Error 1 error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
显然,编译器调用复制构造函数而不是addOuter方法中找到的push_back中的移动构造函数.这是编译器错误吗?如果不是为什么,对于这个特定情况,是不是调用了移动构造函数?