2

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

[](unique_ptr<int>){};

编译器错误表明它无法访问 unique_ptr 的私有复制构造函数。以上在 Visual Studio 2010 中运行良好。

它也在gcc 4.7.2中编译得很好

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

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

EDIT2:我已经提交了关于 Microsoft Connect 的错误报告,如果它也影响到您,欢迎您投票。

4

2 回答 2

1

尝试这个:

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

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

于 2013-05-03T00:47:03.007 回答
-1

我仍然不确定这是否是一个错误,它确实看起来像它。

同时,逻辑等价于

  [](unique_ptr<int> aArg)
  {

  };

可以写成

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

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

所以,虽然这对我来说不实用,但对其他人来说可能会派上用场。

于 2013-04-22T04:06:59.973 回答