【发布时间】:2014-07-26 00:09:06
【问题描述】:
使用 Visual Studio 2014 CTP、C++ (v140) 编译器:
auto gp = [&](BYTE* buff) {
auto gp1 = [](char* bff, char** p1) {
*p1 = strstr((char*)bff, "(");
return (*p1);
};
};
错误:
conditional expression of type 'void' is illegal
(也许auto 在那里输入错误?)
如果我将内部 lambda 声明为 std::function<char*(char*, char**)> gp1 那么它可以工作
是我做错了什么还是编译器错误?
【问题讨论】:
-
内部编译器错误 (ICE)总是 是一个错误。您在第一个示例中缺少
};,但鉴于错误消息,我猜这是复制粘贴错误。遗憾的是,但这可能是 alpha 质量编译器所期望的。 -
内部 lambda 有 2 个参数,所以你的
std::function需要是std::function<char*(char*, char**)>。此外,您应该能够使用一个简单的函数指针 -char*(*gp1)(char*, char**) = []... -
@Praetorian 啊,是的,它有帮助但是......为什么
auto不起作用? -
谁知道......可能是我在第一条评论中所说的。 FWIW,如果将缺少的
};添加到您的原始示例中,代码将在 VS2013 上编译。 -
@Praetorian 我知道它在
VS2013中编译:) 我将添加};以使sn-p 更完整
标签: c++ visual-studio visual-c++ lambda