【发布时间】:2011-05-17 00:51:01
【问题描述】:
如何将 lambda 指定为默认参数?我想这样做:
int foo(int i, std::function<int(int)> f = [](int x) -> int { return x / 2; })
{
return f(i);
}
但我的编译器(Mac OS X 上的 g++ 4.6)抱怨:
error: local variable 'x' may not appear in this context
编辑: 事实上,这是一个编译器错误。上述代码适用于最新版本的 gcc (4.7-20120225)。
【问题讨论】:
-
我想知道这是 gcc 的问题还是标准禁止它。
-
补充一点,MSVC (2010) 发出相同的警告:
error C2587: 'x' : illegal use of local variable as default parameter-see declaration of 'x'。似乎是因为参数,如果我从 lambda、std::function和函数调用中删除它,它编译得非常好。 -
@Xeo:我想知道 VC2011 对这种语法有何反应,因为它改进了 lambda 支持。
-
现在(2017 年 2 月 24 日)通过
clang++ -c -std=c++11与 clang-800.0.42.1 一起工作