无法使用Microsoft编译器编译lambda函数

时间:2016-06-03 14:53:42

标签: c++ lambda

我以为我做错了什么。但我尝试生成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的任何规则?

0 个答案:

没有答案