【发布时间】:2015-05-09 06:33:23
【问题描述】:
我试图用这样的代码编译一个项目
#include <tuple>
#include <utility>
struct Foo
{
};
template <typename... Args>
void start(Args&&... args) {
auto x = [args = std::make_tuple(std::forward<Args>(args)...)] () mutable {
auto y = [args] () mutable {
auto z = [] (Args&&... args) {
return new Foo(std::forward<Args>(args)...);
};
};
};
}
int main()
{
start(Foo{});
}
它似乎在 GCC 4.9.1 中编译得很好,但在 Clang 3.4、3.5、3.6 中却没有。错误信息是
错误:无法在 lambda 中隐式捕获变量“args” 未指定捕获默认值
这是一个编译器错误吗?如果是这样,是否有任何解决方法可以让它在 Clang 上编译?
【问题讨论】:
-
如果是MCVE,测试起来会容易得多。
-
@chris 我在最近的 clang++ 中尝试了this 并得到了一个 ICE :(
-
好吧,3.7.0 r236860 似乎处理得很好。注意我关闭了警告作为一种肮脏的方式来删除未使用的变量混乱。
-
缩减为coliru.stacked-crooked.com/a/bdc0b6ab9b36bf15。根据@chris,看起来像是一个已修复的 Clang 错误。