Visual Studio 2012 lambda与unique_ptr参数回归

Visual Studio 2012 lambda with unique_ptr argument regression?

本文关键字:ptr 参数 回归 unique Studio 2012 lambda Visual      更新时间:2023-10-16

我惊讶地发现在Visual Studio 2012 Update 1中以下代码不再编译:

[](unique_ptr<int>){};

编译错误声明无法访问unique_ptr的私有复制构造函数。以上在Visual Studio 2010中工作得很好。

在gcc 4.7.2

中也可以正常编译

这是一个已知的错误,还是这实际上是预期的行为?我在microsoftconnect上找不到任何东西。

编辑:我刚刚更新到Visual Studio 2012 Update 2,问题仍然发生。

编辑2:我已经在Microsoft Connect上提交了一个bug报告,如果它也影响到你,欢迎你给它投票。

试试这个:

int a;
[a](unique_ptr<int>){};

不管它是什么,只要明确地捕获一些东西。

我仍然不确定这是否是一个bug,但看起来确实像。

同时,

的逻辑等价
  [](unique_ptr<int> aArg)
  {
  };

可以写成

  [](unique_ptr<int> && aArg)
  {
    unique_ptr<int> arg = std::move(aArg);
  };

对于我来说,这不是一个很好的方法,因为我正在编写库代码。lambda的调用者是库,lambda是用户提供的。我不希望强迫用户手动std::move参数。

所以,虽然这对我来说不实用,但它可能对其他人有用。