我以为我做错了什么。但我尝试生成MCVE,它确实在Ideone编译器下编译:http://ideone.com/wroGhB
我的实际代码如下:
std::shared_ptr<Mapping> Mapping::loadFromDb( const QString& name, taservices::DatabaseReadOnlyContextInterfacePtr db )
{
taservices::DatabaseTransactionContextInterfacePtr dbContext =
taservices::DatabaseCoreInterface::getInstance()->getTransaction(db->getDatabasePath());
dbContext->beginTransaction();
taservices::TableInterfacePtr mappingTable = dbContext->getTable(DB_TABLE_NAME);
// When lambda returns true for table row, the index ends up in this array
std::vector<int> indices;
mappingTable->getRowIndices([name](const RowType& val)->bool{
if(val.size() > Mapping::C_NAME) {
if(val[Mapping::C_NAME] == name) {
return true;
}
}
return false;
}, indices);
// ... lot's of commented out code folows
return nullptr;
}
我开始声明lambda的那一行发生了错误。
错误C4430:缺少类型说明符 - 假设为int。注意:C ++不支持default-int
奇怪的是,上面几行的类似代码正在起作用:
rowIndex = mappingTable->getRowIndex([index, mappingName](const RowType& val)->bool{
if(val.size()>2) {
if(val[Mapping::C_NAME] == mappingName && val[Mapping::C_INDEX]==index) {
return true;
}
}
return false;
});
为什么一次工作,一次不工作?微软是否在其职能中发布了关于lambdas的任何规则?