首页 > 解决方案 > eclipse CDT 显示 lambda 表达式的无效参数“候选人是:...”

问题描述

面向 C/C++ 开发人员的 Eclipse IDE(包括孵化组件)
版本:2020-06 (4.16.0)
构建 ID:20200615-1200

C/C++ 开发工具
版本:9.11.1.202006011430内部版本号
:20200601-1605

带有 gcc 10.2.0 的 Arch Linux

给定以下最小示例

#include <cstdint>
#include <functional>

struct LinkedElement {
    uint8_t index = 0;
    LinkedElement* next = nullptr;
};

static LinkedElement* linkedList;

LinkedElement* FindLinkedElement(std::function<bool(LinkedElement*)> filter)
{
    for (auto elem = linkedList; elem != nullptr; elem = elem->next)
    {
        if (filter(elem))
        {
            return elem;
        }
    }
    return nullptr;
}

int main(int argc, char **argv) {
    auto broken = FindLinkedElement([](LinkedElement* le){ return le->index > 0; });
    auto works = FindLinkedElement(nullptr);
}

eclipse 将在第一个下划线FindLinkedElement作为main()“语义错误”(由“问题”视图确定)并带有以下错误消息

Invalid arguments '
Candidates are:
LinkedElement * FindLinkedElement(std::function<bool (LinkedElement *)>)
'

第二行未标记为错误。编译器对所有这些代码都很好。如何让 eclipse 不将此视为错误?

标签: c++lambdaeclipse-cdt

解决方案


看起来问题出在arm-none-eabi-gcc10.2.0. 现在运行9_2020_q2_update我在 Eclipse 中看不到更多错误。


推荐阅读